《c语言程序设计.doc》由会员分享,可在线阅读,更多相关《c语言程序设计.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、西安郵電學院软件设计报告题 目: 学生宿舍管理系统 院部名称:电子工程学院专业名称:电子信息工程班 级:电子0902班内序号:03学生姓名 :陈趱指导教师:张琼时间:2009年6月21日至 2007年7月2日C语言程序设计报告一、实验目的1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。 2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。 3.熟练运用if语句和switch语句以及嵌套应用。涉及循环调用的,了解并掌握三种控制语句while、do-while和for语句。 4.学习并掌握C语言定义函数的基本方法、声
2、明函数及调用函数的方法和过程。 5. 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 6.掌握结构体类型变量、数组的定义和使用。 7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。 8. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串二、课程设计内容简介宿舍管理主要功能:(1)能按学生的学号、姓名、性别、及所在院、系、班等完成对学生所住宿舍的添加、录入、修改、删除。(2)能统计住宿学生数目,能根据学生的学号进行排序(3)能按学号或者是宿舍门牌号及床位号查询住宿
3、学生的各项信息。(4)能输出学生住宿情况的具体信息表。开发工具Visual C+ 6.0运行平台Windows XP三、程序特色宿舍管理最主要的是对学生信息的查询,本程序在查询上特色鲜明,可以实现以下功能 : 1按学生姓名查询; 2按学号查询; 3按班级查询; 4查询某一宿舍住宿人员及人数; 5查询某宿舍电话;建立的链表带有头结点,方便处理;数据和密码保存在不同的文件夹三、需求分析系统功能:(1)能按住宿学生的学号、姓名、性别、年龄及院系完成他住宿情况的录入、删除和修改。(2)能按住宿学生的学号、姓名、性别、所住宿舍门牌号、床位号添加信息。(3)具有强大的查询功能(4)能按照学号从小到大排列该
4、学生的各项信息。(5)能统计住宿人数。(6)可以保存到文件。(7)可以从文件读入已有的文件。(8)以菜单方式工作;(9)具有密码功能;。(10)运用链表设计。性能描述:各种功能都可以满足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。四、总体设计1宿舍管理系统模块图主函数密码模块输入模块输出模块排序模块查询模块删除模块修改模块文件读出模块文件写入模块按学号按姓名按班级宿舍住宿人员查询宿舍电 话姓名学号院系班宿舍宿舍电话显示菜单插入模块统计模块按宿舍性别 2.程序可以满足以下功能:1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用3.程序能够保证各模块
5、功能的独立和数据共享4.相近功能以级联菜单的形式集成。五、详细设计 (1)各个模块的程序流程图 删除模块否是 返回主菜单是否继续进入删除输入删除学生姓名删除成功无此学生信息查询模块姓名进入查询选择学号班级宿舍宿舍电话否返回主菜单显示信息是否继续是修改模块进入修改选择修改项目学号班级宿舍床铺号宿舍电话姓名性别是否返回主菜单是否继续输出修改后信息输出修改前信息输入修改后信息插入模块插入模块姓名学号院系班宿舍宿舍电话是否继续返回主菜单否是学生信息学生信息姓名学号宿舍电话住宿楼、宿舍所在院性别所在系所在班六各函数功能1 密码模块void in_system()如果是新的系统需要设定密码,以后进入需要输
6、入密码;密码保存在文件中;2 主菜单main()进入管理系统选择相应的模块,包括:建立新的数据,插入,查询,修改,删除,统计,排序,打印等;3 查询模块 void find(struct stu *head)包括:void search_cla(struct stu *head) 按班级查找 void search_num(struct stu *head) 按学号查找 void search_name(struct stu *head) 按姓名查找 void search_stu(struct stu *head) 按宿舍查找 void search_tel(struct stu *head
7、) 查询宿舍电话4修改模块 gai(struct stu *head) /*修改学生信息*/5 插入模块 insert(struct stu *head) /*插入*/6删除模块 shan(struct stu *head) /*删除*/ 7统计模块 count (struct stu *p) /*数据统计*/ 七显示页面 1 进入主菜单2 打印菜单3 修改主菜单4 查询主菜单九、总结及体会 在写完第一遍程序后,首先进行了调试,仍是按照从某个模块来分析的,然后在整体执行但是远远有很多不如意的地方,特别是对警告的调试比较麻烦,棘手,但是通过向老师请教,向同学请问最终还是解决的不少问题,后来经过分
8、析,参照同学所设计的程序,自己的功能比较单调和简单,后来又添加了几个模块使其变得功能稍微有点完善。通过很多次的调试,我知道了在写程序的时候应该注重于细节,例如一个小的标点符号,就能使我们浪费一整天的时间来调试,所以细节非常重要;其次是要在编写程序之前应该想明白程序的功能,然后在进行写程序;最后在调试运行程序的时候应该注意到每一个程序的应用,看是否真真的能够实现其功能,不要漏掉一个细节。通过这次课程设计我学会了很多,做事情不仅要有耐心,还要注重细节;虽然做不到最好,但是要尽自己的全力去做,不管对与错。.感受:使用VC+6.0编写程序界面方便清晰,各种功能全面,可以很好的帮助初学者查找问题所在。在
9、第一周就已经为整个程序定下了框架,使得后面的程序设计思路变得清晰,明白每天都要干些什么。在为期两周的课程设计里,遇到了很多各种各样的问题。 比如在程序编译过程中有些是0错误但有很多警告,虽然这些警告不会影响到程序的联接执行,但仔细检查和改正这些警告会对C语言有更深入和深刻的了解。有时候VC+6.0的编译器会出现不可预知的错误,需要自己去判断。 最终成品的模块和起初的已经有很多不同,在编写的过程中不断地改进和完善程序,为了方便用户使用特别在主函数中添加了保存和读取模块,使用清屏函数保持界面简洁。 在编写程序的过程中我也学会使用了许多辅助工具,比如有道词典,可以帮助判断程序调试时的报错涵义。搜狗输
10、入法可以提高我的录入速度。合理使用双VC+协助找到自己程序和范例的不同和缺点,方便修改。我也逐步学会使用Debug功能判断函数出错的地方和原因,这大大简化了我找错误的难度。 作为一个初学者,在编写中往往遇到许多逻辑上的小问题。比如在调试删除模块时,偶尔会报错。我仔细分析了程序后发现出错的原因在于对于输入数据没有保存成文件但是函数在执行过程中会调用文件。 对于文件的打开方式也是刚开始令我比较头痛的问题,特别是在文本与二进制区别和只读与读写区别上,最后经过不断地尝试和看书,最终的效果还不错,但是还需要继续熟悉,融会贯通。 编写和调试时遇到了许多令人头痛的问题,感谢我的同学和老师给予我的帮助,毫无疑
11、问,别人的经验是非常珍贵的财富,虚心积极地请教问题可以让我少走许多弯路。八、参考文献1.C语言程序设计王曙燕主编2005年版2.C语言程序设计参考 例题11 3. C程序设计 第二版 谭浩强 清华大学出版社 2002年版九 程序代码#include #include#include#define N sizeof(struct stu)struct stu /*结构体定义*/ char name10; char yuan10; char xi10; char cla10; char num10; char sex; char lou5; char she5; char hao5; char t
12、el15; struct stu *next;void store(struct stu *p) /*存储数据*/ FILE *fp; char file40; printf(nn请输入要存储数据的文件夹路径:n); /*可以任意选择文件路径*/ flushall(); gets(file); fp=fopen(file,wt); while(p-next!=NULL) p=p-next; fwrite(p,N,1,fp); fclose(fp); struct stu *creat() /*建立链表*/ struct stu *p1,*p2,*head; system(cls); head=
13、p2=(struct stu *)malloc(N); /*带头结点的链表*/ p1=(struct stu *)malloc(N); printf(nn请输入学生的姓名 n); flushall(); scanf(%s,p1-name); printf(n性别n); flushall(); scanf(%c,&p1-sex); printf(n学号n); flushall(); scanf(%s,p1-num); printf(n所在院n); flushall(); scanf(%s,p1-yuan); printf(n所在系n); flushall(); scanf(%s,p1-xi);
14、printf(n所在班级n); flushall(); scanf(%s,p1-cla); printf(n所在楼号n); flushall(); scanf(%s,p1-lou); printf(n所在宿舍n); flushall(); scanf(%s,p1-she); printf(n请输入所在床铺号n); flushall(); scanf(%s,p1-hao); printf(n宿舍电话n); flushall(); scanf(%s,p1-tel); while(strcmp(p1-num,0) /*学号为0退出*/ p2-next=p1; p2=p1; p1=(struct st
15、u *)malloc(N); printf(nn请输入学生的姓名 n); flushall(); scanf(%s,p1-name); printf(n性别n); flushall(); scanf(%c,&p1-sex); printf(n学号n); flushall(); scanf(%s,p1-num); printf(n所在院n); flushall(); scanf(%s,p1-yuan); printf(n所在系n); flushall(); scanf(%s,p1-xi); printf(n所在班级n); flushall(); scanf(%s,p1-cla); printf(
16、n所在楼号n); flushall(); scanf(%s,p1-lou); printf(n所在宿舍n); flushall(); scanf(%s,p1-she); printf(n请输入所在床铺号n); flushall(); scanf(%s,p1-hao); printf(n宿舍电话n); flushall(); scanf(%s,p1-tel); p2-next=NULL; free(p1); return head;struct stu *bulid() /*建立新的数据库*/ struct stu *head; return (head=creat();struct stu *
17、read() /*读取数据*/ struct stu *p1,*p2,*head; FILE *fp; if(fp=fopen(D:student.txt,rt)=NULL) system(cls);printf(nn提醒: 学生住宿情况数据不存在,按任意键进入主菜单);flushall(); getchar(); else head=p2=(struct stu *)malloc(N); while(1) p1=(struct stu *)malloc(N); if(fread(p1,N,1,fp)!=1) break; p2-next=p1; p2=p1; p2-next=NULL; fc
18、lose(fp); return head;void search_name(struct stu *head) /*按姓名查找*/ int i; char c,name10; struct stu *p; while(1) i=0; p=head; p=p-next; printf(nn请输入要查找的学生姓名: ); flushall(); gets(name); while(p!=NULL) if(strcmp(p-name,name)=0) printf(nn姓名t院t系t班t学号t性别t楼号t宿舍号t床铺号t宿舍电话); printf(n%st%st%st%st%st%ct%st%st
19、%sn,p-name,p-yuan,p-xi,p-cla,p-num,p-sex,p-lou,p-she,p-hao,p-tel); i+; p=p-next; if(!i) printf(nn对不起,无此学生信息!); printf(n是否继续按学生姓名查找(y或n): ); /*可以多次查找*/ flushall(); scanf(%c,&c); if(c=n) break; void search_num(struct stu *head)/*按学号查询*/ char c,num10; struct stu *p; while(1) p=head; p=p-next; printf(n请
20、输入要查询的学生学号: ); flushall(); gets(num); while(p!=NULL&strcmp(p-num,num)!=0) p=p-next; if(p=NULL) printf(n对不起,无此学生信息); else if(strcmp(p-num,num)=0) printf(nn学号t姓名t院t系t班t性别t楼号t宿舍号t床铺号t宿舍电话); printf(n%st%st%st%st%st%ct%st%st%st%sn,p-num,p-name,p-yuan,p-xi,p-cla,p-sex,p-lou,p-she,p-hao,p-tel); printf(n是否继
21、续按学生学号查询(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; void search_stu(struct stu *head) /*按宿舍查询*/ char c,lou5,she5; int i; struct stu *p; while(1) i=0; p=head; p=p-next; printf(n请输入要查询楼号及宿舍号(如13 204): ); flushall(); scanf(%s%s,lou,she); printf(n%s楼%s宿舍成员有:,lou,she); while(p!=NULL) if(strcmp(p-s
22、he,she)=0&strcmp(p-lou,lou)=0) printf(nn姓名t学号t院t系t班t性别t床铺号t宿舍电话); printf(n%st%st%st%st%st%ct%st%sn,p-name,p-num,p-yuan,p-xi,p-cla,p-sex,p-hao,p-tel); i+; p=p-next; if(!i) printf(nn 无此宿舍或此宿舍无学生入住!); printf(n是否继续按宿舍查询(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; void search_cla(struct stu *head)
23、/*按班级查询*/ char cla10,c; int i; struct stu *p; while(1) i=0; p=head; p=p-next; printf(n请输入要查询的班级: ); flushall(); gets(cla); printf(n%s班住宿情况如下:,cla); printf(nn院t系t姓名t学号t性别t楼号t宿舍号t床铺号t宿舍电话); while(p!=NULL) if(strcmp(p-cla,cla)=0) printf(n%st%st%st%st%ct%st%st%st%sn,p-yuan,p-xi,p-name,p-num,p-sex,p-lou,
24、p-she,p-hao,p-tel); i+; p=p-next; if(!i) printf(nn 班级输入有误!); printf(n是否继续按班级查询(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; void search_tel(struct stu *head)/*宿舍电话查询*/ struct stu *p; char lou5,she5,c; while(1) p=head; p=p-next; printf(n请输入要查询电话的宿舍号(包括楼号)(如13 204): ); flushall(); scanf(%s%s,lou,
25、she); while(p!=NULL) if(strcmp(p-lou,lou)=0&strcmp(p-she,she)=0) break; p=p-next; if(p=NULL) printf(nn 对不起,宿舍号输入有误!); else printf(n%s,p-tel); printf(n是否继续查询宿舍电话(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; void find(struct stu *head) /*查找选择,具有不同的查找选项*/ int n; int c; struct stu *p; while(1) syst
26、em(cls); p=head; printf(nn*欢迎来到学生宿舍信息查询系统*); printf(nn 1按照学生姓名查询 nn 2按照学生学号查询 nn 3按照班级查询 nn 4查询某宿舍住宿人员 nn 5查询宿舍电话 nn 0退出信息查询系统n); printf( 请选择0-5 ); flushall(); scanf(%d,&n); switch(n) case 1: search_name(p); break; case 2: search_num(p); break; case 3: search_cla(p); break; case 4: search_stu(p); br
27、eak; case 5: search_tel(p); break; case 0: break; if(!n) break; printf(nn是否继续浏览查询系统(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; shan(struct stu *head) /*删除*/ struct stu *p,*p1; int i=0; char c,num10; while(1) system(cls); p=head; p1=p-next; if(p1=NULL) printf(n学生数据为空,无法删除!); printf(请输入要删除学生的学号
28、: ); flushall(); scanf(%s,num); while(p1!=NULL) if(strcmp(p1-num,num)=0) p-next=p1-next; i+; free(p1); break; p=p1; p1=p1-next; if(i) printf(n删除成功!); else printf(n无此学生信息,无法删除!); printf(n是否继续删除(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; void insert(struct stu *head) /*插入*/ struct stu *p,*p1; c
29、har c; while(1) system(cls); p=head; p1=(struct stu *)malloc(N); printf(nn请输入要插入学生的姓名 n); flushall(); scanf(%s,p1-name); printf(n性别n); flushall(); scanf(%c,&p1-sex); printf(n学号n); flushall(); scanf(%s,p1-num); printf(n所在院n); flushall(); scanf(%s,p1-yuan); printf(n所在系n); flushall(); scanf(%s,p1-xi);
30、printf(n所在班级n); flushall(); scanf(%s,p1-cla); printf(n所在楼号n); flushall(); scanf(%s,p1-lou); printf(n所在宿舍n); flushall(); scanf(%s,p1-she); printf(n所在床铺号n); flushall(); scanf(%s,p1-hao); printf(n宿舍电话n); flushall(); scanf(%s,p1-tel); while(p-next!=NULL&strcmp(p-next-num,p1-num)next; if(p!=NULL&strcmp(p
31、-num,p1-num)=0) free(p1); printf(nn对不起,已有相同学号的学生!); else p1-next=p-next; p-next=p1; printf(nn插入成功!); printf(nn是否继续插入(y或n): ); flushall(); scanf(%c,&c); if(c=n) break; gai(struct stu *head) /*修改学生信息*/ struct stu *p; char name10,c; int i; while(1) system(cls); p=head; p=p-next; printf(n请输入要修改的学生姓名: );
32、 flushall(); gets(name); while(p!=NULL&strcmp(p-name,name)!=0) p=p-next; if(strcmp(p-name,name)=0) printf(n要修改的学生信息是: ); printf(n姓名t性别t学号t院t系t班t楼号t宿舍号t床铺号t宿舍电话n); printf(n%st%ct%st%st%st%st%st%st%st%s,p-name,p-sex,p-num,p-yuan,p-xi,p-cla,p-lou,p-she,p-hao,p-tel); printf(n 请选择您要修改的项目: ); printf(n 1姓名 nn 2学号 nn 3性别 nn 4院、系、班级