西安郵電大學C语言课程设计报告书学院名称计算机学院学生姓名专业名称班级学号指导教师时间2013年06月03日至2013年06月12日实验题目:学生通讯录管理系统一、实验目的通过本次实习,进一步巩固了我们所学过的c语言,具备解决综合性的问题的能力,通过系统分析、系统设计、编程调试、,写实验报告等环节,初步掌握了软件系统设计的方法和步骤,训练灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,提高程序设计水平,培养必要的工程实践动手能力。二、实验内容我设计的是“学生通讯录管理系统”,主要是针对全校学生通讯信息的管理,适用对象可以是学校,也可以是一个院,一个班,方便学校对学生的管理和学生之间的互相联系交流。学生的信息主要包括学生的姓名、学号、电话号码、qq号码、住宿地址(例如01557,代表在01号宿舍楼,557宿舍)。在编写过程中主要运用C语言的基本知识有:结构体的构建和使用,指针和链表的构建,链表的建立,插入,删除等,文件的建立,保存,关闭等和一些系统清屏函数的使用。三、需求分析这是一个是由C语言编写的一个学生通讯录管理软件,本程序在MicrosoftVisualC++6.0下运行,其主要功能是实现对学生通讯信息的录入,添加,删除,保存等。这是个大众化的软件,操作简单,占用资源少,方便了学生之间的交流和学校对学生通讯信息的管理。四、实验的概要及部分截图1.方案设计密码登录添加信息删除信息输入信息查询信息显示信息保存信息学生通讯录管理系统2.程序中数据主要是学生通讯信息,具体属于类型如下:structstu{intnum;charname[10];inttel;intqq;intadr;3、模块功能说明第一密码模块:调用字符比较函数strcmp(),进行管理者登录操作(密码事先设定为04112012,可以在代码中直接修改)。第二录入模块:利用建立的动态链表直接输入,对学生通讯信息进行录入。第三删除模块:调用Del(),对某一学生通讯信息进行删除操作第四添加模块:调用Add(),对新来学生通讯信息进行添加录入。第五显示模块:调用xianshi(),将录入的学生通讯信息显示在屏幕上第六查询模块:调用chaxun(),对学生通讯信息进行查询。第六保存模块:调用save(),保存输入的学生通讯信息。五、详细设计及运行结果1.部分模块运行结果图示登入界面主页界面录入界面(学号输入为零时退出)查询界面(学号输入为零退出)添加模块界面显示/打印界面保存界面删除界面六、说明情况及心得体会1、重要说明(密码输入模块:密码初始为04112012,当然密码可以在修改(因为是补考,还要上本专业的课,所以做的有点仓促,密码模块并没有做那么复杂)当输入正确密码,系统显示“登陆成功”,然后提示按任意键进入主界面,不过当密码输入三次错误密码时,会提示你输入密码错误已达三次,再按任意键会自动退出系统。。2、实验中的心得体会心得体会:通过这次课程设计,我对C语言有了更深刻的了解,增强了程序的编写能力,巩固了专业知识,对程序的模块化观念也又模糊逐渐变的清晰了。在程序的运行与调试过程中出现了很多错误,通过反复地复习课本上的相关知识,不停地修改与调试,我终于完成了这段程序,而且有个很大的收获,c语言程序必须要精炼,许多人代码写得很长,但是执行起来却很浪费时间和内存空间,尤其在大型程序,软件的编写和测试中,所以我们要尽量做到简单,精炼,多试试是否能用一种更简单和实用的程序来代替。在调试过程中,我认识到了C语言的灵活性与严谨性,同一个功能可以由不同的语句来实现,但编写程序时要特别注意细节方面的问题,因为一个小小的疏忽就能导致整个程序不能运行。当然我也认识到了自己的薄弱之处,如对链表相关知识的欠缺,文件运用的不熟练,在以后的学习中我要集中精力、端正态度,争取把知识学得更扎实、更全面。参考文献:《C语言程序设计》(第二版)王曙燕科学出版社:《C语言程序设计》高涛,陆丽娜编西安交通大学出版社七、源程序清单#includestdio.h#includemalloc.h#includestdlib.h#defineNsizeof(structstu)#includestring.hintn,k;structstu//定义结构体数组{intnum;//定义学生学号类型charname[10];//学生名字类型为字符型inttel;//学生电话类型为整形intqq;//qq号也为整形intadr;//学生住宿地址也为整形structstu*next;};//创建带头结点的动态链表structstu*creat(void){structstu*p1,*p2,*head;n=0;head=p2=(structstu*)malloc(N);//head,p2指向头结点system(cls);printf(请输入资料,输0退出!\n);while(1){if(n==1)head=p1;elsep2-next=p1;//将新结点链接到表尾p2=p1;//p2指向新的表尾p1=(structstu*)malloc(N);//p1指向新申请的节点printf(请输入学号:);scanf(%d,&p1-num);if(p1-num==0)//学号为0时跳出循环break;printf(请输入名字:);scanf(%s,&p1-name);printf(请输入电话:);scanf(%d,&p1-tel);printf(请输入qq号:);scanf(%d,&p1-qq);printf(请输入地址(前面的为楼,后三位是宿舍**#***形式):);scanf(%d,&p1-adr);n++;}//n自加p2-next=NULL;//将表尾节点next域置空free(p1);//释放无效节点printf(输入的学生数为:%d个!\n,n);printf(按任意键返回主菜单...);getchar();return(head);}//保存文件函数save(structstu*p1){FILE*fp;chardizhi[20];system(cls);printf(请输入文件路径及文件名:);scanf(%s,dizhi);if((fp=fopen(dizhi,w+))==NULL){printf(不能打开文件!\n);return0;}while(p1!=NULL)//将输入项表中的变量值按照格式字符串指定的格式输入到文件指针fp所指向的文件位置{fprintf(fp,%d\t%s\t%d\t%d\t%d\t\n,p1-num,p1-name,p1-tel,p1-qq,p1-adr);p1=p1-next;}//保存下一个学生信息fclose(fp);printf(文件已经保存!\n);fflush(stdin);printf(按任意键返回主菜单...);getchar();return(0);}//删除学生信息函数DEL(structstu*head){structstu*p1,*p2;intnum;system(cls);printf(输入要删除学生的学号:);scanf(%d,&num);p1=head;while(num!=p1-num&&p1-next!=NULL){p2=p1;//p2为p1的前驱p1=p1-next;}if(num==p1-num){if(p1==head)head=p1-next;//删除head头结点,再次产生头结点elsep2-next=p1-next;printf(已删除:%d\n,num);n=n-1;}elseprintf(%d不存在!\n,num);printf(现在数为:%d个!\n,n);fflush(stdin);printf(按任意键返回主菜单...);getchar();return(0);}//添加学生信息函数Add(structstu*head){while(1){structstu*p,*q;q=head;p=(structstu*)malloc(N);printf(请输入添加学生的信息!);printf(---------------------\n);printf(请输入学生学号:\n);scanf(%d,&p-num);printf(请输入学生姓名:\n);scanf(%s,p-name);printf(请输入学生电话:\n);scanf(%d,&p-tel);printf(请输入学生qq:\n);scanf(%d,&p-qq);printf(请输入学生住址:\n);scanf(%d,&p-adr);while(q-next!=NULL){q=q-next;}q-next=p;p-next=NULL;p=head;p=p-next;n++;printf(,添加完成!现在学生数为:%d个!\n,n);fflush(stdin);printf(按任意键返回菜单...);getchar();return(head);}}//显示学生信息voidxianshi(structstu*head){structstu*p;system(cls);printf(学号\t名字\t电话\tqq\t地址\t\n);printf(-----------------------------------------\n);p=head;while(p!=NULL){printf(%d\t%s\t%d\t%d\t%d\t\n,p-num,p-name,p-tel,p-qq,p-adr);p=p-next;}fflush(stdin);printf(按任意键返回主菜单...);getchar();}//查询学生信息chaxun(structstu*head){intnum;structstu*p1;system(cls);printf(输入要查询的学生的学号:);scanf(%d,&num);while(num!=0){p1=head;while(num!=p1-num&&p1-next!=NULL)p1=p1-next;if(num==p1-num){printf(学号\t名字\t电话\tqq\t地址\t\n);printf(-----------------------------------------\n);printf(%d\t%s\t%d\t%d\t%d\t\n,p1-num,p1-name,p1-tel,p1-qq,p1-adr);}elseprintf(%d学生不存在!\n,num);printf(输入要查询的学生的学号:);scanf(%d,&num);}fflush(stdin);printf(按任意键返回主菜单...);getchar();}//通讯录管理系统菜单intmenu(k){inti;system(cls);printf(\t\t\t西邮学生通讯录管理系统\n);printf(\t\t\t作者:ltt学号:04112012\n);for(i=0;i80;i++)printf(*);printf(1输入学生的资料\t\t2查询学生的通讯信息\t\t3删除文件函数\n);printf(4添加学生的资料\t\t5显示学生的通讯信息\t\t6保存输入的资料\t\n);for(i=0;i80;i++)printf(*);printf(欢迎进入西邮学生通讯录管理系统,请选择您所要的操作(选择(0)退出):);scanf(%d,&k);return(k);}charpassword[10]=04112012;//主函数main(){structstu*head=0,*stu=0;chars[10];intflag=0;intn=3;//n=3,密码只能错三次,三次以后自动退出do{printf(请输入管理员密码:\n);scanf(%s,s);if(!strcmp(s,password)){system(cls);pri