C语言程序设计课程设计通讯录系统.doc

上传人:laozhun 文档编号:2384666 上传时间:2023-02-17 格式:DOC 页数:42 大小:549.50KB
返回 下载 相关 举报
C语言程序设计课程设计通讯录系统.doc_第1页
第1页 / 共42页
C语言程序设计课程设计通讯录系统.doc_第2页
第2页 / 共42页
C语言程序设计课程设计通讯录系统.doc_第3页
第3页 / 共42页
C语言程序设计课程设计通讯录系统.doc_第4页
第4页 / 共42页
C语言程序设计课程设计通讯录系统.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C语言程序设计课程设计通讯录系统.doc》由会员分享,可在线阅读,更多相关《C语言程序设计课程设计通讯录系统.doc(42页珍藏版)》请在三一办公上搜索。

1、C语言程序设计课程设计学 号:_姓 名:_指导教师:_完成日期:2010.07.03_学校_系_专业目 录C语言程序设计课程设计11摘要31.1系统功能模块框图42功能函数描述(函数名、参数;使用的算法描述及流程图)52.1.1主控函数main()菜单62.1.2菜单函数void menu()72.1.3输入函数void input()82.1.4输出函数void display()92.1.5删除函数void del()102.1.6查找函数void find()112.1.7修改函数void chang()122.1.8排序函数void paixu()132.1.9读取文件函数void m

2、yread()142.1.10保存文件函数void save()152.1.11退出系统函数void out()163课程设计中的C语言知识点164其他函数175文件操作176课程设计中的难点及解决办法176.1文件的操作问题176.2结构体成员数据排序问题186.3输入记录问题187课程设计源程序(能正确编译并运行,得到正确结果)198程序运行截图及注释359课程设计心得体会4210参考文献421 摘要通讯录是拥有管理和编辑同学姓名、学号、联系方式(电话、邮编、E-mail、地址)等信息的软件,能够实现:1. 输入添加学生记录;2. 显示学生记录;3. 修改学生记录;4. 按不同的项删除记录

3、;5. 按不同项进行查找;6. 对已存在的通讯录按不同的项排序;7. 从文件读出通讯录;8. 将通讯录写入文件;9. 退出程序。以上功能将由函数功能来实现,主函数main()调用nemu()函数, nemu()再调用其他函数实现输入和输出等操作,运用了选择(配套循环,实现排序等功能)、循环(及退出循环)、数组(字符串)、函数、结构体、文件操作(读和写)。符合选题以下要求:一、通讯录编辑(添加、删除);二、按不同的项进行查找;三、对已存在的通讯录按不同的项排序;四、将通讯录写入文件;五、从文件读入通讯录。六、通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。1.1 系统功能模块框

4、图输入:添加通讯录记录,输入学号、姓名、电话、邮编、E-mail、地址,输入六个数据后会提示是否继续添加。显示:可以输出输入时和读取文件后的内容。修改:输入要修改的那个人的名字后,再依次输入学号、姓名、电话、邮编、E-mail、地址即可完成修改,如果有多条记录,会提示正在修改那条记录。删除:输入要删除的那个人的其中一项后,会自动删除他(她)的记录内容,并统计删除了多少。查找:可以选择用学号、姓名、电话、邮编、E-mail、地址六种方式查询。排序:要以选择用学号、姓名、电话、邮编、E-mail、地址六种方式排序,排序完成会提示是否保存。读取文件:将文件里的全部信息读取显示。保存:将通讯录信息保存

5、到C:UsersAdministratorDesktopstudent.txt文件中。退出:退出系统。2 功能函数描述(函数名、参数;使用的算法描述及流程图)2.1.1 主控函数main()菜单2.1.2 菜单函数void menu()2.1.3 输入函数void input()2.1.4 输出函数void display()2.1.5 删除函数void del()2.1.6 查找函数void find()2.1.7 修改函数void chang()2.1.8 排序函数void paixu()2.1.9 读取文件函数void myread()2.1.10 保存文件函数void save()2.

6、1.11 退出系统函数void out()3 课程设计中的C语言知识点1 头文件的使用2 函数的定义与使用3 变量的作用域4 结构体5 顺序结构程序、选择结构程序、循环结构程序的设计6 指针7 编译预处理8 文件操作(文件指针,读写与保存,打开与关闭)9 排序(冒泡排序)4 其他函数1 toupper()2 fwrite(void *buffer,int size,int count,FILE *fp)3 fread(void *buffer,int size,int count,FILE *fp)4 strcmp(char *str1,char *str2)5 strcpy(char *st

7、r1,char *str2)6 system(cls)等等5 文件操作打开(建立)、关闭、读、写、保存6 课程设计中的难点及解决办法6.1 文件的操作问题原因:在开始文件操作读与写过程中数据不相符,fwrite(void *buffer,int size,int count,FILE *fp),fread(void *buffer,int size,int count,FILE *fp)两个函数用错,解决后如程序代码:void myread()int i;FILE *fp;if(fp=fopen(C:UsersAdministratorDesktopstudent.txt,rb)=NULL)/

8、打开文件printf(打开文件出错,系统将要关闭!);exit(1);printf(n学号 t姓名 t电话 t邮编 tE_mail t地止n);M=fgetc(fp);for(i=0;iM;i+)fread(&stui,sizeof(struct student),1,fp); 。 printf(%s t%s t%s t%s t%s t%sn,&stui.stu_number,&stui.name,&stui.tel,&stui.Postal,&stui.e_mail,&stui.address); fclose(fp); printf(数据读取完毕,任意键继续!n);getch();6.2

9、结构体成员数据排序问题在排序的时候,想用选择排序,但是结构体成员不能用地址传递的办法实现,解决办法是用冒泡排序6.3 输入记录问题在输入记录的函数中void input() /输入记录int i;char ch;printf(n请输入-n);for(i=M;iN;i+)printf(学号(数字):);scanf(%s,&stui.stu_number);printf(姓名:);scanf(%s,&stui.name);printf(电话(数字):);scanf(%s,&stui.tel);printf(邮编(数字):);scanf(%s,&stui.Postal);printf(E-mail:

10、);scanf(%s,&stui.e_mail);printf(地址:);scanf(%s,&stui.address);printf(-n);M+;printf(是否继续输入(是-任意键,否-N)?n);ch=getch();if(toupper(ch)=N)break; 代码for(i=M;iN;i+)这句原来是for(i=0;iN;i+),自己是希望把全部的数据输出,但是在读取保存有数据的文件后再执行void input()这个函数时就会出错(丢失数据),在改成for(i=M;iN;i+)就再也没有出错了i=M, 解决了读取文件后想再输入数据时数据覆盖问题,即文件有4条数据,再输入的话不

11、是从1=0开始而是从i=4开始。7 课程设计源程序(能正确编译并运行,得到正确结果)/通讯录基本要求:/1、通讯录,以文件形式实现;/1) 通讯录编辑(添加、删除);/2) 按不同的项进行查找;/3) 对已存在的通讯录按不同的项排序;/4) 将通讯录写入文件;/5) 从文件读入通讯录。/备注:通讯录至少应该有以下数据项:姓名,地址,电话,邮编,E-mail。#include #include /toupper()的头文件#include /system()的头文件#include /字符串函数头文件#include/getch()的头文件#define N 200int M=0;/全局变量,用

12、来计算struct student stuN中N的个数void menu();/主菜单void input(); /显示内容数据函数声明void display(); /输出数据函数声明 void del();/删除函数声明void find();/查找函数声明void chang();/修改函数声明void paixu();/排序(sort)函数声明void myread();/读取文件函数声明void save();/保存函数声明void out();/退出函数声明struct student /结构体 char stu_number12; char name8; char tel13;

13、char Postal6; char e_mail20; char address20; stuN;void menu()char n;printf(欢迎使用通讯录系统,学生-_n);printf(按任意键进入系统);getch();while(1)system(cls);printf(+-菜单-+n);printf(| 1:输入信息 2:显示内容 |n);printf(| 3:修改 4:删除 |n);printf(| 5:查找 6:排序 |n);printf(| 7:读取文件 8:保存文件 |n);printf(| 9:退出系统 |n);printf(+-+n);printf(选择数字直接进

14、入功能,请选择(1-9):); n=getch();if(n=1&n=9) switch(n) case 1:input();break; /输入记录 case 2:display();break; /显示内容 case 3:chang();break; /修改记录 case 4:del();break; /删除记录 case 5:find();break; /查找 case 6:paixu();break; /排序 case 7:myread();break; /读取文件 case 8:save();break; /保存文件 case 9:out();break; /退出 else prin

15、tf(您输入有误,请重新选择!); getch(); void input() /输入记录int i;char ch;printf(n请输入-n);for(i=M;iN;i+)printf(学号(数字):);scanf(%s,&stui.stu_number);printf(姓名:);scanf(%s,&stui.name);printf(电话(数字):);scanf(%s,&stui.tel);printf(邮编(数字):);scanf(%s,&stui.Postal);printf(E-mail:);scanf(%s,&stui.e_mail);printf(地址:);scanf(%s,&

16、stui.address);printf(-n);M+;printf(是否继续输入(是-任意键,否-N)?n);ch=getch();if(toupper(ch)=N)break; void display() /显示内容int i;char ch;printf(n学号 t姓名 t电话 t邮编 tE_mail t地止n);for(i=0;iM;i+)printf(%s t%s t%s t%s t%s t%sn,&stui.stu_number,&stui.name,&stui.tel,&stui.Postal,&stui.e_mail,&stui.address);printf(共有%d条记录

17、,是否保存(是-Y,否-任意键)?,M);ch=getch();if(toupper(ch)=Y)save();void chang() /修改记录int i,sum=0; char name10,t;printf(n输入要修改的姓名:); scanf(%s,name);printf(n学号 t姓名 t电话 t邮编 tE_mail t地止n); for(i=0;iM;i+) if(strcmp(name,stui.name)=0) sum+; printf(%s t%s t%s t%s t%s t%sn,&stui.stu_number,&stui.name,&stui.tel,&stui.P

18、ostal,&stui.e_mail,&stui.address); if(sum!=0)printf(有%d个相同姓名的数据!,sum);sum=0;for(i=0;i_=1&n=6) switch(n) case 1: printf(n输入要删除的学号:);scanf(%s,name);for(j=0;jM;j+)if(strcmp(name,stuj.stu_number)!=0)/同名才删!strcpy(stu1i.name,stuj.name);strcpy(stu1i.stu_number,stuj.stu_number);strcpy(stu1i.tel,stuj.tel); s

19、trcpy(stu1i.Postal,stuj.Postal); strcpy(stu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.address);i+;elsesum+;/统计删除的个数if(sum!=0)for(i=0;i(M-sum);i+)stui=stu1i;printf(已删除%d条记录!n,sum);getch();else printf(删除失败!查无此人!n);getch();M=M-sum;/删除后改变M的值break;case 2:printf(n输入要删除的姓名:);scanf(%s,name);for(j=0;jM

20、;j+)if(strcmp(name,stuj.name)!=0) /同名才删!strcpy(stu1i.name,stuj.name);strcpy(stu1i.stu_number,stuj.stu_number);strcpy(stu1i.tel,stuj.tel); strcpy(stu1i.Postal,stuj.Postal); strcpy(stu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.address);i+;elsesum+;if(sum!=0)for(i=0;i(M-sum);i+)stui=stu1i;printf(

21、已删除%d条记录!n,sum);getch();else printf(删除失败!查无此人!n);getch();M=M-sum;break;case 3:printf(n输入要删除的电话:);scanf(%s,name);for(j=0;jM;j+)if(strcmp(name,stuj.tel)!=0) /同才删!strcpy(stu1i.name,stuj.name);strcpy(stu1i.stu_number,stuj.stu_number);strcpy(stu1i.tel,stuj.tel); strcpy(stu1i.Postal,stuj.Postal); strcpy(s

22、tu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.address);i+;elsesum+;if(sum!=0)for(i=0;i(M-sum);i+)stui=stu1i;printf(已删除%d条记录!n,sum);getch();else printf(删除失败!查无此人!n);getch();M=M-sum;break;case 4:printf(n输入要删除的邮编:);scanf(%s,name);for(j=0;jM;j+)if(strcmp(name,stuj.Postal)!=0)/同才删!strcpy(stu1i.name,

23、stuj.name);strcpy(stu1i.stu_number,stuj.stu_number);strcpy(stu1i.tel,stuj.tel); strcpy(stu1i.Postal,stuj.Postal); strcpy(stu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.address);i+;elsesum+;if(sum!=0)for(i=0;i(M-sum);i+)stui=stu1i;printf(已删除%d条记录!n,sum);getch();else printf(删除失败!查无此人!n);getch();M

24、=M-sum;break;case 5:printf(n输入要删除的E_mail:);scanf(%s,name);for(j=0;jM;j+)if(strcmp(name,stuj.name)!=0) /同才删!strcpy(stu1i.name,stuj.name);strcpy(stu1i.stu_number,stuj.stu_number);strcpy(stu1i.tel,stuj.tel); strcpy(stu1i.Postal,stuj.Postal); strcpy(stu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.ad

25、dress);i+;elsesum+;if(sum!=0)for(i=0;i(M-sum);i+)stui=stu1i;printf(已删除%d条记录!n,sum);getch();else printf(删除失败!查无此人!n);getch();M=M-sum;break;case 6:printf(n输入要删除的地止:);scanf(%s,name);for(j=0;jM;j+)if(strcmp(name,stuj.address)!=0) /同才删!strcpy(stu1i.name,stuj.name);strcpy(stu1i.stu_number,stuj.stu_number)

26、;strcpy(stu1i.tel,stuj.tel); strcpy(stu1i.Postal,stuj.Postal); strcpy(stu1i.e_mail,stuj.e_mail);strcpy(stu1i.address,stuj.address);i+;elsesum+;if(sum!=0)for(i=0;i=1&n=6) switch(n) case 1: printf(您选择了按学号的查找方式!n); printf(请输入学号:); scanf(%s,numstr); printf(n学号 t姓名 t电话 t邮编 tE_mail t地止n); for(i=0;iM;i+) i

27、f(strcmp(numstr,stui.stu_number)=0) printf(%s t%s t%s t%s t%s t%sn,&stui.stu_number,&stui.name,&stui.tel,&stui.Postal,&stui.e_mail,&stui.address); sum+;printf(共找到了%d个数据!n,sum);printf(任意键继续!n);getch();break; case 2: printf(您选择了按姓名的查找方式!n);printf(请输入姓名:);scanf(%s,numstr);printf(n学号 t姓名 t电话 t邮编 tE_mail t地止n);for(i=0;iM;i+)if(strcmp(numstr,stui.name)=0) printf(%s t%s t%s t%s t%s t%sn,&stui.stu_number,&stui.name,&stui.tel,&stui.Postal,&stui.e_mail,&stui.address); sum+; printf(共找到了%d个数据!n,sum);printf(任意键继续!n);getch();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号