1.
高级语言(C)课程设计
2012 年 7 月 4日·北京
一、 任务书*************************************2
二、 小组成员情况*******************************2
三、 总体设计***********************************2
四、 模块划分及功能*****************************3
五、 算法说明***********************************4
六、 框架图*************************************6
七、 流程图*************************************8
八、 源程序清单*********************************12
九、 程序测试***********************************26
一十、 结论、体会及建议***************************32
一十一、 附:参考文献资料************************33
一、任务书
题目6:小型通讯录设计
功能:实现简单的通讯录信息管理,基本信息包括编号、姓名、手机、邮编、地址、关系、性别、生日、QQ、e-mail.
基本要求:
1.设计简单的菜单,能够进行系统功能选择。
2. 实现信息的录入功能。
3. 在已有信息的基础上添加新的记录。
4. 删除指定编号的记录。
5. 复制指定编号的记录
6. 实现信息的浏览功能
7. 按编号查询功能
8. 按手机号排序功能
二.小组成员情况
组长:李海霞 学号:5120110752 负责:文件导出、删除、排序、复制、输出
组员:孙琳 学号:5120110723 负责:主菜单、添加、查询、保存退出
另外:主函数,结构体定义,函数声明,文件及实验报告,虽有分工,但是大多数内容是有两人讨论后共同完成的。期间各自编写函数的过程中遇到的问题均由两人共同商讨,以及询问老师后,一起解决的。
三、总体设计
利用struct record定义数据结构,用void声明函数,用开关语句switch, case分开事件进行程序,实现系统功能选择,利用if,while语句判断函数,for语句实现循环,利用printf和scanf进行输出与输入,用getch()输入字符串,最终实现通讯录功能。
通讯录中的记录项用结构体record表示,包含10个属性:id、name、phone 、address、postcode、e-mail、relation、QQ、sex、birthday分别代表用户的编号、姓名、电话、地址、邮编、e_mail、关系、QQ 、性别、生日。
1、结构体数组:
struct record //定义一个结构体数组
{
char id[10]; //编号
char name[20];//姓名
char phone[20];//电话
char adress[40]; //地址
char postcode[10]; //邮编
char e_mail[30]; //e_mail
char relation[20];//关系
char QQ[20];//QQ
char sex[10];//性别
char birthday[20];//生日
}student[500];
2、包括的函数:
void mainmenu();//主菜单
void readfromfile();//读取文件
void newrecord();//新添纪录
void showall();//输出记录
void searchmenu();//查询菜单
void searchbyid();//按编号查询
void searchbyname();//按姓名查询
void searchbyphone();//按电话查询
void deletemenu();//删除菜单
void deleteall();//删除所有
void deleteone();//删除单个
void deletebyid();//按编号删除
void deletebyname();//按姓名删除
void listmenu();//排序菜单
void listbyid();//按编号排序
void listbyname();//按姓名排序
void copy();//复制菜单
void writetofile();//保存退出
四、模块划分及功能
主模块:main()//主函数
其他模块:
模块一:void mainmenu(); //主菜单
模块二:void readfromfile(); //读取文件
模块三:void newrecord(); //新添纪录
模块四:void showall(); //输出记录
模块五:void searchmenu(); //查询菜单
模块六:void searchbyid(); //按编号查询
模块七:void searchbyname(); //按姓名查询
模块八:void searchbyphone(); //按电话查询
模块九:void deletemenu(); //删除菜单
模块十:void deleteall(); //删除所有
模块十一:void deleteone(); //删除单个
模块十二:void deletebyid(); //按编号删除
模块十三:void deletebyname(); //按姓名删除
模块十四:void listmenu(); //排序菜单
模块十五:void listbyid(); //按编号排序
模块十六:void listbyname(); //按姓名排序
模块十七:void copy(); //复制菜单
模块十八:void writetofile(); //保存退出
五、算法说明:
1.通讯录中的记录项用结构体record表示,包含10个属性。
2.主菜单:利用switch语句进行选择所需功能;输入“1”会进入“新添记录”的界面;输入“2”进入“输出记录”的界面;输入“3”会进入“查询菜单”的界面;输入“4”进入“删除记录”的界面;输入“5”进入“记录排序”的界面;输入“7”进入“保存退出”的界面;输入“8”进入“不保存退出”的界面。
3.添加记录:利用printf()函数和scanf() 函数实现按要求输入信息,再利用if()语句实现是否继续添加记录。
4.输出记录:利用for循环和if语句实现全部输出;
5.查询菜单:利用switch选择查询方式。在查询菜单中输入“1”进入“按编号查询”界面;输入“2”进入“按姓名查询”界面;输入“3”进入“按电话查询”
界面;输入“4”进入“主菜单”界面。
6.按编号查询:利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的编号是否相等,如找到相同的记录,就输出此人的全部信息,如果没有找到就显示“没有此人的信息”。
7.按姓名查询:利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的姓名是否相等,如找到相同的记录,就输出此人的全部信息,再内嵌一个if语句进行查找相同名字的人的信息,再内嵌一个if语句继续查找,若不继续查找就输出“没有相同姓名的学生纪录按任意键返回主菜单”,如果一开始没有找到就显示“没有此人的信息”。
8.按电话号查询:利用for循环从第一条记录到最后一条记录进行查找,再利用if语句判断要查找的记录和待比较的电话号码是否相等,如找到相同的记录,就输出此人的全部信息,如果没有找到就显示“没有此人的信”。
9.删除菜单:利用switch语句进行选择所需功能;输入“1”会进入“删除所有”的界面;输入“2”进入“删除单个”的界面;输入“3”会进入“返回主菜单”的界面。
10.删除所有:利用if 语句进行是否全部删除。
11.删除单个:利用switch语句选择删除方式,输入“1”进入“按电话号码删除”
界面;输入“2”进入“按姓名删除”界面。
11.按电话号码删除:利用if语句进行判断是否有记录,再利用for循环进行查找信息,如果找到,就显示所有要删除的信息,再利用if语句进行是否删除,内嵌for循环,把记录前移,内嵌if 语句实现是否继续删除。
12.按姓名删除:利用if语句进行判断是否有记录,再利用for循环进行查找信息,如果找到,就显示所有要删除的信息,再利用if语句进行是否删除,内嵌for循环,把记录前移,内嵌if 语句实现是否删除相同姓名的同学信息
13.利用switch语句实现排序选择,输入“1”会进入“按电话排序的界面;输入“2”进入“按姓名排序”的界面;输入“3”会进入“返回主菜单”的界面。
14.按电话号码排序:利用for循环和if语句以及do….while实现升序,再利用if语句实现是否显示排序后的信息,调用显示函数。
15.按姓名排序排序:利用for循环和if语句以及do….while实现升序,再利用if语句实现是否显示排序后的信息,调用显示函数。
六、框架图:
七.流程图:
八、源程序清单
#include
#include
#include
#include
struct record //定义一个结构体数组
{
char id[10]; //编号
char name[20];//姓名
char phone[20];//电话
char adress[40]; //地址
char postcode[10]; //邮编
char e_mail[30]; //e_mail
char relation[20];//关系
char QQ[20];//QQ
char sex[10];//性别
char birthday[20];//生日
}student[500];
int num=0;//外部变量num为文件中的纪录数
FILE *p; //定义一个指向文件的指针变量p
void mainmenu();//主菜单
void readfromfile();//读取文件
void newrecord();//新添纪录
void showall();//输出记录
void searchmenu();//查询菜单
void searchbyid();//按编号查询
void searchbyname();//按姓名查询
void searchbyphone();//按电话查询
void deletemenu();//删除菜单
void deleteall();//删除所有
void deleteone();//删除单个
void deletebyphone();//按电话号码删除
void deletebyname();//按姓名删除
void listmenu();//排序菜单
void listbyphone();//按电话号码排序
void listbyname();//按姓名排序
void copy();//复制菜单
void writetofile();//保存退出
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()//从文件导出,判断是否有通讯录
{
if((p=fopen("student.txt","rb"))==NULL) //将fopen函数的返回值赋给指针变量P,打开输入文件student.txt
{
printf("\n\t\t通讯录文件不存在");
if ((p=fopen("student.txt","wb"))==NULL) //打开输出文件student.txt
{
printf("\n\t\t建立失败");
exit(0); //终止正在执行的程序
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(p,0,2); //文件位置指针移动到文件末尾,fseek(文件类型指针,位移量,起始点)
if (ftell(p)>0) //ftell函数的目的是得到当前位置,用相对于文件开头的位移量来表示,文件不为空
{
rewind(p); //文件位置指针移动到文件开始位置,此函数没有返回值
for (num=0;!feof(p) && fread(&student[num],sizeof(struct record),1,p);num++);
/*fread(buffer,size,count,pt)(地址,读写的字节数,读写多少数据项,FILE类型指针),每次从P指向的文件中读入结构体数组的一个元素;
feof检查文件是否结束,遇见文件结束符,返回非零值*/
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void mainmenu()//主菜单
{
char choice;
system("cls");//清屏
printf("\n\t\t******************** 主菜单 ********************");
printf("\n\t\t*********** 1-新添纪录 2-输出记录 **************");
printf("\n\t\t*********** 3-查询菜单 4-删除菜单 **************");
printf("\n\t\t*********** 5-记录排序 6-文件复制 **************");
printf("\n\t\t*********** 7-保存退出 8-不保存退出*************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choice=getch();
switch(choice)
{
case '1':newrecord();break;
case '2':showall();break;
case '3':searchmenu();break;
case '4':deletemenu();break;
case '5':listmenu();break;
case '6':copy();break;
case '7':writetofile();break;
case '8':exit(0); break;
default:mainmenu();
}
}
void newrecord()//添加记录
{
printf("\n\t\t**************** 请输入信息 ****************\n");
printf("\n\t\t输入编号:");
scanf("%s",&student[num].id);
printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:");
scanf("%s",&student[num].e_mail);
printf("\n\t\t输入QQ:");
scanf("%s",&student[num].QQ);
printf("\n\t\t输入性别:");
scanf("%s",&student[num].sex);
printf("\n\t\t输入生日:");
scanf("%s",&student[num].birthday);
printf("\n\t\t输入关系:");
scanf("%s",&student[num].relation);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
newrecord();
return;
}
void showall()//输出记录
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************");
for (i=0;i
{
printf("\n\t\t编号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t关系:%s",student[i].relation);
printf("\t\t");
if (i+1
{
printf("\n\t\t__________________________请按任意键继续");
getch();
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return;
}
void searchmenu()//查询菜单
{
char choice;
system("cls");
printf("\n\t\t******************* 查询菜单 ********************");
printf("\n\t\t********** 1-按编号查询 2-按姓名查询************");
printf("\n\t\t********** 3-按电话查询 4-返回主菜单************");
printf("\n\t\t*************************************************");
printf("\n\t\t请选择:");
choice=getch();
switch (choice)
{
case '1':searchbyid();break;
case '2':searchbyname();break;
case '3':searchbyphone();break;
case '4':mainmenu();break;
}
}
void searchbyid()//按编号查询
{
int mark=0; //查找到的个数
int i;
int a=0;
printf("\n\t\t****************** 按编号查找 ******************\n");
char id[10];
printf("\n\t\t请输入编号:");
scanf("%s",id);
for(i=0;i
{
if (strcmp(student[i].id,id)==0) //记录中的编号和待比较的编号是否相等
{
printf("\n\t\t************** 以下是您查找的信息 **********");
printf("\n\t\t编号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t关系:%s",student[i].relation);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t没有此人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void searchbyname()//按姓名查询
{
int mark=0;
int i;
int a=0;
printf("\n\t\t***************** 按姓名查找 *******************");
char name[20];
printf("\n\t\t请输入姓名:");
scanf("%s",name);
for(i=a;i
{
if (strcmp(student[i].name,name)==0) //记录中的姓名和待比较的姓名是否相等
{
printf("\n\t\t************* 以下是您查找的学生信息 ***********");
printf("\n\t\t编号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t关系:%s",student[i].relation);
printf("\n\t\t************************************************");
mark++;
if ((i+1)
{
printf("\n\t\t是否继续查找相同名字的人的信息:(y/n)");
if (getch()=='y')
{
a=i;
continue; //跳出本次循环,回到第一个if,继续查找
}
else
return;
}
else
{
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
}
if(mark!=0)
{
printf("\n\t\t没有相同姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
else
{
printf("\n\t\t没有相同姓名的学生纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void searchbyphone() //按电话查询
{
int mark=0;
int i;
int a=0;
printf("\n\t\t****************** 按电话查找 ******************");
char phone[10];
printf("\n\t\t请输入电话号码:");
scanf("%s",phone);
for(i=0;i
{
if(strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t************** 以下是您查找的信息 **********");
printf("\n\t\t学号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t关系:%s",student[i].relation);
printf("\n\t\t************************************************");
printf("\n\t\t按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("\n\t\t没有此人的信息");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
}
void deletemenu()//删除菜单
{
char choice;
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t*************删除菜单****************");
printf("\n\t\t*********** 1-删除所有 **************");
printf("\n\t\t*********** 2-删除单个 **************");
printf("\n\t\t*********** 3-返回主菜单*************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choice=getch();
switch (choice)
{
case '1':deleteall();break;
case '2':deleteone();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
void deleteall()//删除所有
{
printf("\n\t\t确认删除?(y/n)");
if (getch()=='y')
{
fclose(p); //成功执行了关闭操作,返回值为0
if ((p=fopen("student.tex","wb"))==NULL) //打开输出文件
{
printf("\n\t\t不能打开文件,删除失败");
readfromfile();
}
num=0;
printf("\n\t\t纪录已删除,按任意键返回主菜单");
getch();
return;
}
else
return;
}
void deleteone()//删除单个
{
char choice;
printf("\n\t\t1-按电话号码删除 2-按姓名删除");
printf("\n\t\t请选择:");
choice=getch();
switch (choice)
{
case '1':deletebyphone();break;
case '2':deletebyname();break;
}
}
void deletebyphone()//按电话号码删除
{
int i,j;
int deletemark=0;
char phone[20];
printf("\n\t\t请输入要删除电话号码:");
scanf("%s",phone);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i=0;i
{
if (strcmp(student[i].phone,phone)==0)
{
printf("\n\t\t以下是您要删除的纪录:");
printf("\n\t\t编号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;j
student[j]=student[j+1];
num--; //记录数减1
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t没有此人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
}
}
void deletebyname()//按姓名删除
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
printf("\n\t\t请输入要删除学生姓名:");
scanf("%s",name);
for (i=a;i
{
if (strcmp(student[i].name,name)==0)
{
printf("\n\t\t以下是您要删除的学生纪录:");
findmark++;
printf("\n\t\t________________________________");
printf("\n\t\t编号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t电话: %s",student[i].phone);
printf("\n\t\t地址: %s",student[i].adress);
printf("\n\t\te-mail:%s",student[i].e_mail);
printf("\n\t\tQQ:%s",student[i].QQ);
printf("\n\t\t邮编:%s",student[i].postcode);
printf("\n\t\t生日:%s",student[i].birthday);
printf("\n\t\t性别:%s",student[i].sex);
printf("\n\t\t________________________________");
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;j
num--;
deletemark++;
printf("\n\t\t删除成功");
if((i+1)
{
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyname();
return;//返回主菜单
}
if((i+1)
{
printf("\n\t\t是否继续删除相同姓名的同学信息?(y/n)");
if (getch()=='y')
{
a=i;
continue;
}
}
}
else
continue;
}
if ((deletemark==0)&&(findmark==0))
{
printf("\n\t\t没有此人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyphone();
return;
return;
}
else if (findmark!=0)
{
printf("\n\t\t没有重名信息");
printf("\n\t\t没有此人的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebypphone();
return;
return;
}
}
void listmenu()//排序菜单
{
char choice;
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("\n\t\t******************* 排序菜单 *******************");
printf("\n\t\t********** 1-按电话排序 2-按姓名排序 **********");
printf("\n\t\t********** 3-返回主菜单 **********");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choice=getch();
switch(choice)
{
case '1':listbyphone();break;
case '2':listbyname();break;
case '3':mainmenu();break;
default:mainmenu();break;
}
}
void listbyphone()//按电话排序
{
int i,j;
record tmp; //临时变量做交换数据用
for (i=1;i
{
if(strcmp(student[i].phone,student[i-1].phone)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.phone,student[j].phone)<0)&&j>=0);
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?(y/n)");
if (getch()=='y')
showall();
return;
}
void listbyname()//按姓名排序
{
int i,j;
record tmp;
for (i=1;i
{
if(strcmp(student[i].name,student[i-1].name)<0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j--;
}while ((strcmp(tmp.name,student[j].name)<0&&j>=0));
student[j+1]=tmp;
}
}
printf("\n\t\t排序成功,是否显示?(y/n)");
if (getch()=='y')
showall();
return;
}
void copy()
{ char outfile[20]; //目标文件名
int i,n;
record temp[500]; //定义临时变量
FILE *sfp,*tfp; //定义指向文件的指针
system("cls"); //清屏
if((sfp=fopen("student.txt","rb"))==NULL) //打开记录文件
{ printf("can not open file\n"); //显示不能打开文件信息
exit(1); } //退出
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); //提示信息
scanf("%s",outfile); //输入目标文件名
if((tfp=fopen(outfile,"wb"))==NULL) //打开目标文件
{ printf("can not open file\n"); //显示不能打开文件信息
exit(1); }//退出
fscanf(sfp,"%d",&n); //读出文件记录数
fprintf(tfp,"%d",n);//写入目标文件数(文件指针,格式字符串,输入表列)
fprintf(tfp,"\n"); //写入换行符
for(i=0;i
{
fscanf(sfp,"%10s%20s%20s%40s%10s%30s%20s%20s%10s%20s\n",temp[i].id,temp[i].name,
temp[i].phone,temp[i].adress,temp[i].postcode,temp[i].e_mail,temp[i].relation,temp[i].QQ,temp[i].sex,temp[i].birthday); //读入记录
fprintf(tfp,"%10s%20s%20s%40s%10s%30s%20s%20s%10s%20s\n",temp[i].id,temp[i].name,
temp[i].phone,temp[i].adress,temp[i].postcode,temp[i].e_mail,temp[i].relation,temp[i].QQ,temp[i].sex,temp[i].birthday
); //写入记录
fprintf(tfp,"\r\n"); //写入换行符
}
fclose(sfp); //关闭源文件
fclose(tfp); //关闭目标文件
printf("You have success copy file!!!\n"); //显示复制成功
getch();
}
void writetofile()//保存退出
{
int i;
if ((p=fopen("student.txt","wb"))==NULL) //打开输出文件student.txt
{
printf("\n\t\t文件打开失败");
}
for (i=0;i
{
if (fwrite(&student[i],sizeof(struct record),1,p)!=1) //写到P文件中的数据项的个数
{
printf("\n\t\t写入文件错误!\n");
}
}
fclose(p);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
九、程序测试
该程序可以实现某人通讯录管理,能够进行系统功能选择,实现信息的录入功能,在已有信息的基础上添加新的记录,删除、复制、查询指定遍号人的记录,进行排序,达到题目要求。
1.主菜单界面:
2.选择主菜单中“1-新添记录”后的界面:
3.选择主菜单中的“2-输出记录”后的界面:
4.选择主菜单中的“3-查询菜单”后的界面:
5.选择查询菜单中的“1-按编号查询”后的界面:
6.选择主菜单中的“4-删除菜单”后的界面:
7.选择删除菜单中的“1-删除所有”后的界面:
8.选择主菜单中的“5-记录排序”后的界面:
9. 选择主菜单中的“6-文件复制”后的界面:
10. 选择主菜单中的“7-保存退出”后的界面:
十、结论、体会及建议
李海霞:两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,担任小组长一职,与同学分工设计,和同学们相互探讨,相互学习,相互监督。学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次C语言编程设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了C语言编程设计等课程。
在这次设计过程中,体现出C语言编程的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢各位老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次C语言设计的每个实验细节和每个数据,都离不开老师的细心指导。由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,万分感谢。
孙琳:通过这次课程设计更深入的了解到了C语言的功能,也进一步的巩固了C语言的算法及编程。本次课设我负责主体部分,定义变量、函数,设计菜单,还有各种修改、完善程序。从选题到编程,从理论到实践,真的是苦大于甜,将近两个星期的时间,经过我和李海霞同学的努力终于编出了小型通讯录管理系统。当然有好大一部分是老师给出的案例中的,但这次编程真的是受益匪浅。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的掌握一门技能,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,在各位老师的辛勤指导下,终于游逆而解。
附:参考文献资料
C程序设计(第四版) 谭浩强 著
C程序设计(第四版) 学习辅导 谭浩强 编著
教育在线的例题
互联网上查阅的相关资料
本文来源:https://www.2haoxitong.net/k/doc/028bcf18b7360b4c2e3f6480.html
文档为doc格式