吉林师范大学计算机学院信息管理与信息系统专业
课程设计报告
课程名称:课程设计
设计题目:同学通讯录
专业:信息管理与信息系统
年级:2012级4班
学号:201241020209
姓名:王蕾
指导教师:白文秀
2014年2 月
目录
课程设计题目审批表 (2)
完成情况一览表 (4)
摘要 (5)
一、设计分析 (6)
二、设计要求 (6)
三、设计实现 (7)
四、系统调试 (7)
五、总结 (9)
附录 (11)
1源代码 (11)
2参考资料 (22)
课程设计题目审批表课程名称:
完成情况一览表
摘要
经过一个学期对C语言课程的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。
本次设计题目为:简单的同学通讯录,主要功能为:1.查找联系人2.添加联系人 3.删除联系人 4.修改联系人 5.显示所有联系人6.统计联系人7.退出系统。程序运用条件,循环,结构体,文件的打开和保存知识点编写。运用菜单实现管理,用户通过按键即可操作,操作简单易懂。
关键字:结构体数组,文件,查找,删除,通讯录系统。
一、设计分析
功能分析:
查找:输入用户想要查找的联系人姓名或学号或电话号就会显示出他的所有信息;若无此联系人,则显示没有找到该生通讯信息。
添加:输入用户想要添加的人数,手动输入学生的信息即可。
删除:输入用户想要删除人的姓名或学号,就可以实现删除联系人;
若没有用户想要删除的联系人,则显示没有您所要删除的学生信息!
修改:输入用户想要修改人的姓名或电话号码,或者E-mail就可以实现;
若没有用户想要修改的联系人,则显示没有查找到该学生的通讯信
息。
查询:用户选择相应功能即可显示所有联系人。
统计:用户选择相应功能即可统计男女生的人数。
退出:用户选择相应功能即可退出系统。
大体功能:
二、设计要求
1.根据所给的课程设计题目,分析课程设计题目的要求;
2.对系统功能模进行分析,携程详细的设计说明文档;
3编写程序代码,调试所写程序使其能正确运行;
4.设计完成的软件便于操作和使用;
5.设计完成后提交设计报告。
三、设计实现
可将设计的原理图,流程图,或网页树状结构图等体现在这里,并加以说明。对原理内容进行解释分析。
程序流程图:
(1)
(3)查找 (4)删除
(5)添加
四、系统调试
在调试的过程中,首先是编写各个函数,在函数的编写过程中查找,添加,统计,修改联系人比较容易,删除的过程主要参考数据结构的单链表的删除过程,再者就是读写文件遇到的麻烦比较大。开始时写入文件总是不成功,利用fprintf()函数写文本文件,最后在老师的帮助下成功写入文件。读文件利用fscanf()函数读取文件,多次调试没有发现问题所在,在老师同学的帮助下,发现时由于文件总学生人数发生变化所在,得已解决问题。主函数的设计比较容易。
软件的使用比较简单易懂,可根据菜单的提示内容按相应的数字进行操作。
五、总结
课程设计是培养我们综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,高级语言已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握高级语言是十分重要的。回顾起此次高级语言课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能论到实践,在整整三星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的真正为社会服务,从而提高自
己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。通过这次课程设计让我看到了高级语言课程设计的博大精深,在设计过程中虽然遇见了很多问题,但当我看到自己设计的程序能够运行时心里无比喜悦,充满了成绩感,并且也增加了我学计算机的兴趣!在设计中发现了自己的许多不足,在学习中的许多问题都暴露出来了。原来感觉学的不错的知识现在用起来却很模糊,而以前没有掌握的现在依人不懂。通过这次课程设计给了我很大的教训,在以后的学习中遇到不懂的不会的一定要当场解决,掌握了的知识也要随时巩固,不要觉得自己已经懂了就不在看它。这次课程设计告诉了我学习知识一定要巩固,尤其是在似懂非懂的情况下一定要好好研究,而不是放弃不学,这样不懂得就会越堆越多。通过这次编程也告诉了我一个问题不仅只有一种方法可以解决,我们要学会从不同角度思考探究解决问题的不同方法,让我们的头脑变得更加灵活。整个设计通过了软件和硬件上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理程序设计综合课程设计16 解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因
此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。课程设计让我对高级语言课程设计有了进一步的了解,也对他产生了浓厚的兴趣,虽然自己有很多不足,但我坚信这次的课程设计也许在以后的学习和生活中会有很大的用处,所以不管遇到什么困难我都会努力学习高级语言课程设计,让自己的头脑变得更加丰富!在这次课程设计中也非常感谢老师和同学们的帮助,让我知道了该怎么做一份正确的课程设计报告,为今后的的课程设计奠定了巩固的基础
附录
1源代码
#include
#include
#include
struct student
{
int num; //学号
char name[20]; // 姓名
char sex[5]; //性别
char workplace[20]; //工作地点
char phonenum[20]; //电话号码
char E_mail[20]; //邮箱
};
int N; //全局变量,用来统计学生的输入人数
int write(struct student message[1000]) //输入学生人数 ,向结构体数组中输入学生
{
printf("请输入要写入的学生人数:");
int n,i=0; //n写入的学生人数;
scanf("%d",&n);
N=n;
printf("学号\t姓名\t性别\t工作单位\t电话号码\tE-mail\n");
while(n--)
{
scanf("%d ",&message[i].num);
scanf("%s",message[i].name);
scanf("%s",message[i].sex);
scanf("%s",message[i].workplace);
scanf("%s",&message[i].phonenum);
scanf("%s",message[i].E_mail);
i++;
}
return 0;
}
int output(struct student message[1000]) // 输出学生信息
{
printf("输出学生信息:\n");
int i=0;
for(i=0;i { printf(" 学号:%d\n",message[i].num); printf(" 姓名:%s\n",message[i].name); printf(" 性别:%s\n",message[i].sex); printf("工作单位:%s\n",message[i].workplace); printf("电话号码:%s\n",message[i].phonenum); printf(" 邮箱:%s\n\n",message[i].E_mail); } return 0; } int search_name(struct student message[1000]) //查找学生名字函数 { int i=0,itag=0; //itag用来计数,判断是否找到 char name[20]; printf("请输入查找学生的姓名:"); scanf("%s",name); for(i=0;i if(strcmp(name,message[i].name)==0) { printf(" 学号:%d\n",message[i].num); printf(" 姓名:%s\n",message[i].name); printf(" 性别:%s\n",message[i].sex); printf("工作单位:%s\n",message[i].workplace); printf("电话号码:%s\n",message[i].phonenum); printf(" 邮箱:%s\n\n",message[i].E_mail); itag++; break; } if(itag==0) printf("没有找到该生通讯信息!\n"); printf("\n"); return i; } int search_num(struct student message[1000]) //查找学生的学号 { int n,i,itag=0; //itag用来计数,判断是否找到 printf("请输入查找学生的学号:"); scanf("%d",&n); for(i=0;i if(n==message[i].num) { printf(" 学号:%d\n",message[i].num); printf(" 姓名:%s\n",message[i].name); printf(" 性别:%s\n",message[i].sex); printf("工作单位:%s\n",message[i].workplace); printf("电话号码:%s\n",message[i].phonenum); printf(" 邮箱:%s\n\n",message[i].E_mail); itag++; break; } if(itag==0) printf("没有找到该生通讯信息!\n"); printf("\n"); return i; } int search_phonenum(struct student message[1000]) //查找学生的电话号{ char tel[20]; int i,itag=0; //itag用来计数,判断是否找到 printf("请输入查找学生的电话号:"); scanf("%s",tel); for(i=0;i if(strcmp(tel,message[i].phonenum)==0) { printf(" 学号:%d\n",message[i].num); printf(" 姓名:%s\n",message[i].name); printf(" 性别:%s\n",message[i].sex); printf("工作单位:%s\n",message[i].workplace); printf("电话号码:%s\n",message[i].phonenum); printf(" 邮箱:%s\n\n",message[i].E_mail); itag++; break; } if(itag==0) printf("没有找到该生通讯信息!\n"); printf("\n"); return i; } int search_E_mail(struct student message[1000]) { char EMS[20]; int i,itag=0; printf("请输入查找学生的E_mail:"); scanf("%s",EMS); for(i=0;i if(strcmp(EMS,message[i].phonenum)==0) { printf(" 学号:%d\n",message[i].num); printf(" 姓名:%s\n",message[i].name); printf(" 性别:%s\n",message[i].sex); printf("工作单位:%s\n",message[i].workplace); printf("电话号码:%s\n",message[i].phonenum); printf(" 邮箱:%s\n\n",message[i].E_mail); itag++; break; } if(itag==0) printf("没有找到该生通讯信息!\n"); return i; } int add(struct student message[1000]) //添加函数 { printf("请输入新添加的人数:"); int m; //增加学生人数 scanf("%d",&m); int i=N; for(i=N;i { scanf("%d ",&message[i].num); scanf("%s",message[i].name); scanf("%s",message[i].sex); scanf("%s",message[i].workplace); scanf("%s",&message[i].phonenum); scanf("%s",message[i].E_mail); } N=N+m; //N当添加人数发生变化时,N变 output(message); return 0; } int Delete_name(struct student message[1000]) //删除学生姓名{ printf("请输入想要删除的学生姓名:"); char name[20]; int i,j,itag=0; //itag用来标记姓名是否相等 scanf("%s",name); for(i=0;i { if(strcmp(message[i].name,name)==0) { j=i; itag++; break; } } if(itag==1) { N=N-1; for(i=j+1;i { message[i-1]=message[i]; } output(message); } else printf("没有您所要删除的学生信息!\n"); return 0; } int Delete_num(struct student message[1000]) //删除学生学号{ printf("请输入想要删除的学生学号:"); int num,j,i,itag=0; scanf("%d",&num); for(i=0;i { if(message[i].num==num) { j=i; itag++; break; } } if(itag==1) { N=N-1; for(i=j+1;i { message[i-1]=message[i]; } output(message); } else printf("没有您所要删除的学生信息!\n"); return 0; } int rewrite_name(struct student message[1000]) //修改学生的姓名{ int j; j=search_name(message); if(j==N) printf("没有查找到该学生的通讯信息!\n"); else { printf("请输入该生的新姓名:"); scanf("%s",message[j].name); printf(" 学号:%d\n",message[j].num); printf(" 姓名:%s\n",message[j].name); printf(" 性别:%s\n",message[j].sex); printf("工作单位:%s\n",message[j].workplace); printf("电话号码:%s\n",message[j].phonenum); printf(" 邮箱:%s\n\n",message[j].E_mail); } return 0; } int rewrite_phonenum(struct student message[1000]) //修改学生的电话号码{ int j; j=search_phonenum(message); if(j==N) printf("没有查找到该学生的通讯信息!\n"); //没有查找到 else { printf("请输入该生的新电话号码:"); scanf("%s",message[j].phonenum); printf(" 学号:%d\n",message[j].num); printf(" 姓名:%s\n",message[j].name); printf(" 性别:%s\n",message[j].sex); printf("工作单位:%s\n",message[j].workplace); printf("电话号码:%s\n",message[j].phonenum); printf(" 邮箱:%s\n\n",message[j].E_mail); } return 0; } int rewrite_E_mail(struct student message[1000]) { int j; j=search_E_mail(message); if(j==N) printf("没有查找到该学生的通讯信息!\n"); else { printf("请输入该生的新E_mail:"); scanf("%s",message[j].E_mail); printf(" 学号:%d\n",message[j].num); printf(" 姓名:%s\n",message[j].name); printf(" 性别:%s\n",message[j].sex); printf("工作单位:%s\n",message[j].workplace); printf("电话号码:%s\n",message[j].phonenum); printf(" 邮箱:%s\n\n",message[j].E_mail); } return 0; } int rewrite_workplace(struct student message[1000]) { int j; j=search_name(message); if(j==N) printf("没有查找到该学生的通讯信息!\n"); else { printf("请输入该生的新的工作单位:"); scanf("%s",message[j].workplace); printf(" 学号:%d\n",message[j].num); printf(" 姓名:%s\n",message[j].name); printf(" 性别:%s\n",message[j].sex); printf("工作单位:%s\n",message[j].workplace); printf("电话号码:%s\n",message[j].phonenum); printf(" 邮箱:%s\n\n",message[j].E_mail); } return 0; } int total(struct student message[1000]) //统计学生人数{ int i=0,m=0,n=0; for(i=0;i { if(strcmp(message[i].sex,"女")==0) n++; else m++; } printf("女生人数为:%d\n",n); printf("男生人数为:%d\n",m); printf("学生人数为:%d\n",m+n); } int writefile(struct student message[1000]) //写入文件{ FILE *fp; int i=0; if(((fp=fopen("student.txt","w+"))==NULL)) { printf("student.txt 文件打开失败!\n"); exit(0); } else { for(i=0;i fprintf(fp,"%d %s %s %s %s %s ",message[i].num,message[i].name,message[i].sex,message[i].workplace,message[i].phonenum,me ssage[i].E_mail); } } fclose(fp); return 0; } int readfile(struct student message[1000]) //读取文件 { FILE *fp; int i=0; if(((fp=fopen("student.txt","r+"))==NULL)) { printf("student.txt 文件打开失败!\n"); exit(0); } else while(feof(fp)==0) { fscanf(fp,"%d %s %s %s %s %s",&message[i].num,message[i].name,message[i].sex,message[i] .workplace,message[i].phonenum,message[i].E_mail); i++; } N=i-1; fclose(fp); } int main() { struct student message[1000]; while(1) { goback: printf("\n"); printf("-------------------------------欢迎使用学校通讯录-------------------------------"); printf("\n"); printf(" 请选择要完成的操作!\n"); printf(" 菜单选择