C语言程序设计小组

发布时间:2012-09-01 18:18:37   来源:文档文库   
字号:

1.

高级语言(C)课程设计

2012 7 4·北京

一、 任务书*************************************2

二、 小组成员情况*******************************2

三、 总体设计***********************************2

四、 模块划分及功能*****************************3

五、 算法说明***********************************4

六、 框架图*************************************6

七、 流程图*************************************8

八、 源程序清单*********************************12

九、 程序测试***********************************26

一十、 结论、体会及建议***************************32

一十一、 附:参考文献资料************************33

一、任务书

题目6小型通讯录设计

功能:实现简单的通讯录信息管理,基本信息包括编号、姓名、手机、邮编、地址、关系、性别、生日、QQe-mail.

基本要求:

1.设计简单的菜单,能够进行系统功能选择。

2. 实现信息的录入功能。

3. 在已有信息的基础上添加新的记录。

4. 删除指定号的记录。

5. 复制指定号的记录

6. 实现信息的浏览功能

7. 号查询功能

8. 按手机号排序功能

小组成员情况

组长:李海霞 学号:5120110752 负责:文件导出、删除、排序、复制、输出

组员:孙琳 学号:5120110723 负责:主菜单、添加、查询、保存退出

另外:主函数,结构体定义,函数声明,文件及实验报告,虽有分工,但是大多数内容是有两人讨论后共同完成的。期间各自编写函数的过程中遇到的问题均由两人共同商讨,以及询问老师后,一起解决的。

三、总体设计

利用struct record定义数据结构void声明函数用开关语句switch case分开事件进行程序,实现系统功能选择,利用ifwhile语句判断函数,for语句实现循环,利用printfscanf进行输出与输入,用getch()输入字符串,最终实现通讯录功能

通讯录中的记录项用结构体record表示,包含10个属性:idnamephone addresspostcodee-mailrelationQQsexbirthday分别代表用户的编号、姓名、电话、地址、邮编、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

《C语言程序设计小组.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式