c语言程序设计学生通讯录信息管理系统.docx
- 文档编号:7544351
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:39
- 大小:26.01KB
c语言程序设计学生通讯录信息管理系统.docx
《c语言程序设计学生通讯录信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言程序设计学生通讯录信息管理系统.docx(39页珍藏版)》请在冰豆网上搜索。
c语言程序设计学生通讯录信息管理系统
西安邮电学院
高级语言课程设计
实验报告
系别:
电信系
专业班级:
科技0701班
学号:
05072007
班内序号:
07
姓名:
朱岩
指导老师:
黄茹
实验课题:
学生通讯信息管理系统
实验时间:
2008.6.10~2008.6.20
2008年6月17日
一、实验目的
1.熟悉C语言的编译,链接和运行过程;
2.掌握C语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值,掌握不同的类型数据之间的赋值规律,赋值使用方法;
3.掌握if语句及switch语句的运用方法及嵌套应用方法;
4.掌握实现循环结构的三种语句while、do-while.、for的使用;
5.掌握C语言函数的定义,声名及调用方法和调用过程;
6.掌握C语言主函数和被调用函数之间的参数传递方式,学会函数的嵌套调用和递归调用的过程和方法;
7.掌握数组的定义,赋值引用及输入输出方法,并正确用字符数组储存字符串,学会字符串的使用;
8.掌握结构体类型变量的定义和使用;
9.掌握指针变量和指向指针的指针变量的定义及使用,进一步了解指向结构体数组的指针变量的概念及使用方法;
10.掌握链表的概念及链表的操作,并理解链表与数组的不同点及优缺点;
11.掌握文件和文件指针的定义及文件建立,打开,关闭,读写等的操作方法
12.能够采用模块化思想调试程序;
二.实验内容
1.编写程序并进行调试运行;
2.输入学生通讯信息并保存于文件,每个学生包含信息如:
序号,姓名,省份,电话,生日,邮编,大学,班级,QQ号信息;
3.对已存入的学生信息进行更新操作,包括添加一个学生信息、删除某个学生信息和修改某个学生信息;
4.通过输入姓名,学号的方式查询学生信息;
5.可以通过省份,生日来统计通讯信息;
6.最后输出学生信息,供需要时打印。
一、需求分析
1.该程序可用于对学生的通讯方式基本信息的存储、更新、查询、输出等操作,以实现对学生通讯录信息的管理,便于同学之间的联系交往;
2.其中更新功能包括:
添加信息,删除信息,修改信息,可根据需要添加一个或多个学生信息,也可针对个别学生信息进行适当的删除或修改,以便随时更新学生通讯信息。
3.程序中设计的查询功能可根据需要从若干数据中查询某个学生信息,并且可根据两种不同的方法查询:
按姓名查询和按电话查询,以满足不同的需要;
4.可以通过输出的方式查看整个通讯录;
5.可以通过排序的方式查看同学生日的先后。
四、概要设计
1、方案设计
对系统进行分析,给出结构图
分析:
系统要实现许多功能,因此遵循结构化程序设计思想来进行本系统的设计:
—,自顶向下逐步细化,将系统设计任务分解出许多子功能模块来计;
结构图如下:
学生通讯录信息管理系统
选择模块
退出
系
统
退
出
模
块
退
出
模
块
保存通讯信息
2.模块功能说明
对各个模块进行功能的描述
(1).输入模块:
录入需要管理的通讯信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(2).添加模块:
可添加一个或多个学生的通讯信息,并将所添加的信息保存,方便查找。
(3).删除模块:
可对失去联系的学生通讯信息做删除处理。
(4).修改模块:
可对通讯信息发生改变的学生信息进行修改。
(5).查询模块:
可对已建立的学生通讯信息进行查询,并且可根据需要选择按姓名查询或按电话查询。
(6).保存模块:
用于对通讯信息进行保存。
(7).输出模块:
将所有学生通讯信息或想要查询的学生信息显示于屏幕,用于打印学生通讯信息或查找某些学生通讯信息。
(8).退出系统:
选择该项,自动退出该系统。
五、详细设计及运行结果
流程图,函数之间相互调用的图示,程序设计及编码,运行结果。
判断i的值
结束
输入模块:
输入模块:
开始
开始
i=0
i=0
i i 输入通讯信息 输入通讯信息 i++ i++ m==ys[i].num! =0 结束 sum=i 结束 开始 开始 排序模块: 更新模块: 输入i的值 i=0 j=i+1 判断i的值 i的年龄大于j的年龄 否 退出系统 删除模块 修改模块 添加模块 是i=1i=2i=3 交换i与j的信息 j=j+1 j 是 否 返回主界面 i=i+1 i 结束 是否 输出信息 结束 输入i 开始 省份统计 退出系统 判断i值 输入i 开始 退出系统 判断i值 查询模块: 统计模块: 结束 六.调试情况及运行结果 1.对自己设计进行评价,指出合理和不足之处,提出改进的方案。 此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,运行的结果也没有预想中的好,数据的输出格式不太规范,而且各模块也出现了一些小问题,在同学们的帮助下,我很有耐心的一次又一次的进行修改,最后运行的结果基本上达到了预期的目的。 可着毕竟是第一次独立完成这样的大程序,结果还不是太理想。 由于时间很短,在选题报告中设想到的好多功能都没有实现。 已有的那些功能虽已能基本上满足用户的需要,但如果还有更多的功能程序就会更加完美。 如: 再录入数据时,没有设计数据输入出错的提示。 2.在设计过程中的感受。 本次C语言的实习课让我对C语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识匮乏的大学生增添了许多社会经验,为我们将来走上工作岗位其了不小的铺垫作用。 本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到那些同学都在那认真的写程序,给了我继续的信心。 在同学的帮助下,我顺利的结束了本次实习,让我知道原来凭借自己努力取得的成功会让自己这么欣慰,也让我知道了友谊和团结的重要性。 并且,通过一种题材两中方式的学习,我掌握了更多的知识,也认识到对比学习的重要性。 七.参考文献 参考书名编者姓名出版社出版时间 《C语言程序设计》王曙燕曹锰科学出版社2005年2月 《C语言程序设计》谭浩强清华大学出版社1999年12月 参考书名编者姓名出版社出版时间 《C语言程序设计》王曙燕曹锰科学出版社2005年2月 八。 附录: 1.链表方式: #include #include #defineNsizeof(structstud) #include #include #include /*日期结构体类型*/ structdate {inty; intm; intd; }bir; /*学生信息结构体类型*/ structstud { intnum;/*序号*/ charname[20];/*姓名*/ chartel[40];/*电话*/ charaddr[40];/*省份*/ charyb[20];/*邮编*/ chardaxue[50];/*大学*/ structdatebir;/*生日*/ structstud*next; }; chara; structstud*h; FILE*fp; /*建立链表*/ structstud*creat() {inti,k; structstud*p1,*p2,*head; printf("\n请输入学生数: \n"); scanf("%d",&k); head=NULL; head=p1=p2=(structstud*)malloc(N);/*head,p1,p2指向首结点*/ for(i=0;i {p1=(structstud*)malloc(N);/*p1指向新申请的结点*/ printf("\n请输入序号: "); scanf("%d",&p1->num); printf("\n请输入姓名: "); scanf("%s",p1->name); printf("\n请输入电话: "); scanf("%s",p1->tel); printf("\n请输入籍贯: "); scanf("%s",p1->addr); printf("\n请输入邮编: "); scanf("%s",p1->yb); printf("\n请输入大学: "); scanf("%s",p1->daxue); printf("\n请输入出生日期: (年-月-日)"); scanf("%d-%d-%d",&p1->bir.y,&p1->bir.m,&p1->bir.d); p2->next=p1;/*将新结点链接到表尾*/ p2=p1;/*p2指向新的表尾*/ } p2->next=NULL; head=head->next;/*头指针后移*/ save_message(head);/*立即保存*/ returnhead; } /*输入模块*/ input_message() {clrscr(); printf("\n\n**********输入学生信息**********\n"); printf("-----------------------------------\n"); h=creat(); bioskey(0); printf("输入完毕,按任意键返回主菜单! "); bioskey(0); } /*输出模块*/ output_message(structstud*p) {clrscr(); if(p==NULL) printf("暂无信息! 请回主菜单录入信息! \n"); else {printf("\n\n=======================通讯录信息表======================\n\n"); printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n"); while(p! =NULL) {printf("-----------------------------------------------------------------------\n"); printf("%s%s%s%d-%d-%d%s%s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p->yb,p->daxue); printf("-----------------------------------------------------------------------\n"); printf("\n"); p=p->next; } } printf("\n"); printf("按任意键返回主菜单! \n\n"); bioskey(0); } /*保存学生信息*/ save_message(structstud*h) {FILE*fp; structstud*f; f=h;/*保证指针位置*/ if((fp=fopen("zhuyan.txt","wb"))==NULL) {printf("不能打开文件! \n"); return; } while(h! =NULL) {if(fwrite(h,sizeof(structstud),1,fp)! =1)/*向文件写入数据*/ {printf("文件写入错误! "); return; } h=h->next; } h=f;/*保证指针位置*/ printf("已存盘,按任意键回上层菜单: \n"); getch(); fclose(fp); return; } /*读取信息*/ read_message() {FILE*fp; if((fp=fopen("zhuyan.txt","rb"))==NULL) {printf("\n\n****暂时还没有该生信息,请按任意键返回上一级菜单.\n"); return; } do {if(fread(h,sizeof(structstud),1,fp)! =1) {if(feof(fp)) printf("已到文件末尾.\n");/*已到文件末尾.*/ elseprintf("文件读取错误! \n");/*文件读取错误.*/ return; } h=h->next; }while(h! =NULL); fclose(fp); getch(); bioskey(0); } /*添加学生信息*/ add_message(structstud*w) {structstud*p,*q; p=(structstud*)malloc(N);/*p指向新申请的结点*/ clrscr(); printf("\n请输入学生序号: "); scanf("%d",&p->num); printf("\n请输入学生姓名: "); scanf("%s",p->name); printf("\n请输入学生电话: "); scanf("%s",p->tel); printf("\n请输入学生籍贯: "); scanf("%s",p->addr); printf("\n请输入学生邮编: "); scanf("%s",p->yb); printf("\n请输入学生大学: "); scanf("%s",p->daxue); printf("\n请输入学生出生日期: "); scanf("%d-%d-%d",&p->bir.y,&p->bir.m,&p->bir.d); p->next=NULL; if(w==NULL) {w=p;/*头指针为空,p作为新头指针*/ return1;/*正确插入返回1*/ } q=w;/*从头指针开始*/ if((q->num)>(p->num))/*找到插入位置在首结点之前*/ {p->next=w;/*将首结点链接在新结点之后*/ w=p;/*p作为新的头指针*/ return1; } while((q->next)! =NULL&&(q->next->num)<(p->num)) q=q->next;/*继续查找插入位置*/ if(q->next==NULL)/*插入位置在尾结点之后*/ {q->next=p;/*新结点链接到尾结点之后*/ return1; } elseif((q->next->num)==(p->num))/*找到重号*/ {free(p);/*释放新结点的存储空间*/ return0;/*不插入返回0*/ } p->next=q->next;/*后续结点链接到新结点之后*/ q->next=p;/*新结点链接到前驱结点之后*/ return1; } /*删除模块*/ del_message(structstud*w) {charname[20]; structstud*p,*q; if(w==NULL) return0;/**w就是头指针,空表不能删除返回0*/ clrscr(); printf("请输入要删除的学生姓名: \n"); scanf("%s",name); q=w; if(strcmp(q->name,name)==0)/*找到要删除的是第一个结点*/ {w=q->next;/*修改头指针*/ free(q);/*释放存储空间*/ return1;/*正确删除返回1*/ } p=q->next; while(p! =NULL) {if(strcmp(p->name,name)==0)/*找到要删除的结点*/ {q->next=p->next;/*后续结点连接到前驱结点之后*/ free(p);/*释放存储空间*/ return1; } q=p;/*推移指针继续查找*/ p=p->next; } return0;/*未找到要删除的结点返回0*/ } /*修改模块*/ revise_message(structstud*g) {intchoice; charname[20],n,m; do {clrscr(); printf("\n**********学生学籍信息***********\n"); printf("输入要修改的学生姓名: \n"); scanf("%s",name); while(g! =NULL) {while(strcmp(g->name,name)! =0) g=g->next; if(g==NULL) {printf("\n该学生不存在! "); bioskey(0); } else {do {printf("\n您要修改哪一项? \n"); printf("\n1序号\n"); printf("\n2姓名\n"); printf("\n3籍贯\n"); printf("\n4电话\n"); printf("\n5大学\n"); printf("\n6出生日期\n"); scanf("%d",&choice); switch(choice) {case1: printf("\n请输入修改后的序号: "); scanf("%d",&g->num);break; case2: printf("\n请输入修改后的姓名: "); scanf("%s",g->name);break; case3: printf("\n请输入修改后的籍贯: "); scanf("%s",g->addr);break; case4: printf("\n请输入修改后的电话: "); scanf("%s",g->tel);break; case5: printf("\n请输入修改后的大学: "); scanf("%s",g->daxue);break; case6: printf("\n请输入修改后的出生日期: "); scanf("%d-%d-%d",&g->bir.y,&g->bir.m,&g->bir.d);break; } printf("\n是否继续修改此人信息? y/n\n"); getchar(); m=getchar(); }while(m=='y'); printf("\n\n=======================通讯录信息表======================\n\n"); printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n"); printf("-----------------------------------------------------------------------\n"); printf("%s%s%s%d-%d-%d%s%s\n",g->name,g->addr,g->tel,g->bir.y,g->bir.m,g->bir.d,g->yb,g->daxue); printf("-----------------------------------------------------------------------\n"); printf("\n"); getch(); } break; } printf("\n要继续吗? (y/n)\n"); getchar(); n=getchar(); }while(n=='y'); printf("\n按任意键返回主菜单! "); bioskey(0); } /*更新模块*/ renew_message() {intchoice=100; while(choice! =0) {printf("\n************更新同学信息*************\n\n"); printf("1.添加同学信息\n\n"); printf("2.删除同学信息\n\n"); printf("3.修改同学信息\n\n"); printf("0.返回修改菜单\n\n"); printf("请选择(0—3): \n"); printf("******************************************\n\n"); scanf("%d",&choice); switch(choice) {case1: add_message(h);break; case2: del_message(h);break; case3: revise_message(h);break; case0: break; default: printf("输入有误! \n"); } } } /*按姓名查询*/ inquire_name(structstud*p) {charname[20]; structstud*f; f=p; clrscr(); printf("\n\n请输入要查找的姓名: "); scanf("%s",&name); if(p==NULL) {printf("\n您要查找的学生暂时不存在,请按任意键返回\n"); bioskey(0); } elseif(strcmp(p->name,name)! =0||p->name==NULL) p=p->next; clrscr(); printf("\n\n该生有关信息为: \n\n\n\n"); printf("\n\n=======================通讯录信息表======================\n\n"); printf("姓名=省份====电话=====生日(年-月-日)=邮编======大学\n"); printf("-----------------------------------------------------------------------\n"); printf("%s%s%s%d-%d-%d%s%s\n",p->name,p->addr,p->tel,p->bir.y,p->bir.m,p->bir.d,p-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言程序设计 学生通讯录信息管理系统 语言程序设计 学生 通讯录 信息管理 系统