学生信息管理系统的设计_第1页
学生信息管理系统的设计_第2页
学生信息管理系统的设计_第3页
学生信息管理系统的设计_第4页
学生信息管理系统的设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西安建筑科技大学大作业目 录一、需求分析2二、设计思路3三、主要源程序代码7四、调试分析过程13五、程序所涉及知识汇总15六、总结25七、参考文献25一、课程设计任务 (一)前言 本课程是继高级语言程序设计(c)课程之后,训练学生综合运用本课程知识,结合实际系统运用c语言进行系统设计以及调试,加深对本课程的理解,提高学生综合应用知识的能力、分析问题、解决问题的能力和利用c语言进行综合系统设计的实践技能。 学c语言程序设计已有1学期了,对c语言的基本概念和常用算法也有了一定的了解,平时虽然也做过一些练习,也看了不少程序从而掌握一定的语法知识和编程经验。但是对于有些功能强大的软件还是没有尝试过能否

2、编得起来。所以决定在所学知识的基础上,再加以拓展,利用4个半天时间编个主题明确、具有一定使用价值的中小程序,以提高自身的编程水平与上机调试技能。 (二)课程设计题目及要求 学生信息管理系统设计: 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,e-mail等。试设计一学生信息管理系统,使之能提供以功能: 系统以菜单方式工作 学生信息录入功能(学生信息用文件保存)-输入 学生信息浏览功能-输出 查询、排序功能-算法 按学号查询、按姓名查询 学生信息的删除与修改 需求分析:根据学生信息管理的需要,建立一个“学生信息管理系统”,以方便对学生的各项管理操作。开发目的如下:能对学生信息就行浏

3、览;能对学生信息进行录入和修改;能根据学生的学号或姓名来查询该学生的信息;能够对学生信息进行自动保存。二、系统设计方案 (一)总体框架图: 学生管理系统:1、录入学生信息 2、修改学生信息 3、查询学生信息 4、浏览学生信息 5、增加学生信息 6、推出信息系统 (二)模块设计 模块一:头文件,变量定义,函数的声明 对系统所使用的变量进行定义,对函数进行声明 模块二:学生信息系统使用帮助 声明函数void help(),对整个系统进行使用说明 模块三:录入学生信息 声明函数void readfile(),说明一个文件指针file *fp 打开文件student.txt 模块四:学生信息的查找 声

4、明void seek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支 模块五:学生信息的修改 声明void modify()为学生信息修改函数,通过switch(item)设定所要修改的项目 模块六:学生信息按学号排序 声明void sort()将录入学生系按升序排列,用的是“冒泡排序法”实现排序 模块七:增加学生信息 声明void insert()插入学生信息,先通过判断学生是否存在,若否则继续输入,若是跳出,重新循环 模块八:删除学生信息 声明void del()实现学生信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。 模块九:显示学生信息 通过d

5、isplay()函数输出学生信息 模块十:保存信息 通过fp=fopen(student.txt,w);写入信息 模块十一:界面菜单 通过switch(num)调用,以上各函数,实现功能 三、数据结构描述与定义 (一)结构体: “结构体名”用作结构体类型的标志,它又称“结构体标记”。声明一个结构体类型的一般形式为: struct 结构体名 成员表列; 大括弧内是该结构体中的各个成员,由它们组成一个结构体。对各成员都应进行类型声明,即 类型名 成员名 也可以把“成员表列”称为“域表”。每一个成员也称为结构体中的一个域。成员名定名规与变量名同。 (二)结构体数组: 一个结构体变量中可以存放一组数据

6、(如本程序中一个学生的学号、姓名、成绩等)。因为程序中需存放若干个学生的信息,这些数据需要参加运算,就得运用数组即结构体数组。结构体数组的每个数组元素都是一个结构体类型的数据,它们分别包括各个成员(分量)项。 四、程序主要代码分析 #include /*i/o函数*/#include /*其它说明*/#include /*字符串函数*/#define buflen 100 /* 缓冲区最大字符数 */#define len 15 /* 学号和姓名最大字符数,实际请更改 */#define n 100 /* 最大学生人数,实际请更改*/struct record /*结构体*/char code

7、len+1; /* 学号 */char namelen+1; /* 姓名 */int age; /* 年龄 */char sex3; /* 性别 */char timelen+1; /* 出生年月 */char add30; /* 家庭地址 */char tellen+1; /* 电话号码 */char mail30; /* 电子邮件地址 */stun;int k=1,n,m; /* 定义全局变量 */ void readfile();/* 函数声明 */void seek();void modify();void insert();void del();void display();void

8、 save();void menu(); int main()while(k)menu();system(pause);return 0; void help()printf(n0.欢迎使用系统帮助!n);printf(n1.进入系统后,先刷新学生信息,再查询;n);printf(n2.按照菜单提示键入数字代号;n);printf(n3.增加学生信息后,切记保存按7;n);printf(n4.谢谢您的使用!n); void readfile()/* 建立信息 */char *p=student.txt;file *fp;int i=0;if (fp=fopen(student.txt,r)=n

9、ull)printf(open file %s error! strike any key to exit!,p);system(pause);exit(0);while(fscanf(fp,%s %s%d%s %s %s %s %s,stui.code,,&stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail)=8)i+;i=i;fclose(fp);n=i;printf(录入完毕!n); void seek() /*查找*/int i,item,flag;char s121; /* 以姓名和学号最长长度+1为准 *

10、/printf(-n);printf(-1.按学号查询-n);printf(-2.按姓名查询-n);printf(-3.退出本菜单-n);printf(-n);while(1)printf(请选择子菜单编号:);scanf(%d,&item);flag=0;switch(item)case 1:printf(请输入要查询的学生的学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 e-mailn);printf(-n);printf(%6s %7s

11、%6d %5s %9s %8s %10s %14sn,stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf(该学号不存在!n); break;case 2:printf(请输入要查询的学生的姓名:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(,s1)=0)flag=1;printf(学生学号 学生姓名 年龄 性别 出生年月 地址 电话 e-mailn);printf(-n);printf(%6s %7s %6d

12、 %5s %9s %8s %10s %14sn,stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);if(flag=0)printf(该姓名不存在!n); break;case 3:return;default:printf(请在1-3之间选择n); void modify() /*修改信息*/int i,item,num;char sex13,s1len+1,s2len+1; /* 以姓名和学号最长长度+1为准 */printf(请输入要要修改的学生的学号:n);scanf(%s,s1);f

13、or(i=0;in;i+)if(strcmp(stui.code,s1)=0) /*比较字符串是否相等*/num=i;printf(-n);printf(1.修改姓名n);printf(2.修改年龄n);printf(3.修改性别n);printf(4.修改出生年月n);printf(5.修改地址n);printf(6.修改电话号码n);printf(7.修改e-mail地址n);printf(8.退出本菜单n);printf(-n);while(1)printf(请选择子菜单编号:);scanf(%d,&item);switch(item)case 1:printf(请输入新的姓名:n);s

14、canf(%s,s2);strcpy(,s2); break;case 2:printf(请输入新的年龄:n);scanf(%d,&stunum.age);break;case 3:printf(请输入新的性别:n);scanf(%s,sex1);strcpy(stunum.sex,sex1); break;case 4:printf(请输入新的出生年月:n);scanf(%s,s2);strcpy(stunum.time,s2); break;case 5:printf(请输入新的地址:n);scanf(%s,s2);strcpy(stunum.add,s2); bre

15、ak;case 6:printf(请输入新的电话号码:n);scanf(%s,s2);strcpy(stunum.tel,s2); break;case 7:printf(请输入新的e-mail地址:n);scanf(%s,s2);strcpy(stunum.mail,s2); break;case 8:return;default:printf(请在1-8之间选择n); void sort()/*按学号排序*/int i,j,*p,*q,s;char temp10;for(i=0;ii;j-)if(strcmp(stuj-1.code,stuj.code)0)strcpy(temp,stuj

16、-1.code);strcpy(stuj-1.code,stuj.code);strcpy(stuj.code,temp);strcpy(temp,);strcpy(,);strcpy(,temp);strcpy(temp,stuj-1.sex);strcpy(stuj-1.sex,stuj.sex);strcpy(stuj.sex,temp);strcpy(temp,stuj-1.time);strcpy(stuj-1.time,stuj.time);strcpy(stuj.time,temp);strcpy(t

17、emp,stuj-1.add);strcpy(stuj-1.add,stuj.add);strcpy(stuj.add,temp);strcpy(temp,stuj-1.tel);strcpy(stuj-1.tel,stuj.tel);strcpy(stuj.tel,temp);strcpy(temp,stuj-1.mail);strcpy(stuj-1.mail,stuj.mail);strcpy(stuj.mail,temp);p=&stuj-1.age;q=&stuj.age;s=*q;*q=*p;*p=s; void insert() /*插入函数*/int i=n,j,flag;pr

18、intf(请输入待增加的学生数:n);scanf(%d,&m);doflag=1;while(flag)flag=0;printf(请输入第 %d 个学生的学号:n,i+1);scanf(%s,stui.code);for(j=0;ji;j+)if(strcmp(stui.code,stuj.code)=0)printf(已有该学号,请检查后重新录入!n);flag=1;break; /*如有重复立即退出该层循环,提高判断速度*/printf(请输入第 %d 个学生的姓名:n,i+1);scanf(%s,);printf(请输入第 %d 个学生的年龄:n,i+1);scanf

19、(%d,&stui.age);printf(请输入第 %d 个学生的性别:n,i+1);scanf(%s,stui.sex);printf(请输入第 %d 个学生的出生年月:(格式:年.月)n,i+1);scanf(%s,stui.time);printf(请输入第 %d 个学生的地址:n,i+1);scanf(%s,stui.add);printf(请输入第 %d 个学生的电话:n,i+1);scanf(%s,stui.tel);printf(请输入第 %d 个学生的e-mail:n,i+1);scanf(%s,stui.mail);if(flag=0)i=i;i+;while(in+m);

20、n+=m;printf(录入完毕!nn);sort(); void del()int i,j,flag=0;char s1len+1;printf(请输入要删除学生的学号:n);scanf(%s,s1);for(i=0;in;i+)if(strcmp(stui.code,s1)=0)flag=1;for(j=i;jn-1;j+)stuj=stuj+1;if(flag=0)printf(该学号不存在!n);if(flag=1)printf(删除成功,显示结果请选择菜单6n);n-; void display()int i;printf(所有学生的信息为:n);printf(学生学号 学生姓名 年

21、龄 性别 出生年月 地址 电话 e-mailn);printf(-n);for(i=0;in;i+)printf(%6s %7s %5d %5s %9s %8s %10s %14sn,stui.code,,stui.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail); void save()int i;file *fp;fp=fopen(student.txt,w); /*写入*/for(i=0;in;i+)fprintf(fp,%s %s %d %s %s %s %s %sn,stui.code,,stu

22、i.age,stui.sex,stui.time,stui.add,stui.tel,stui.mail);fclose(fp); void menu()/* 界面 */int num;printf( nn 智能0901学生信息管理系统 nn);printf( * nn);printf( * sunny team * n n);printf( * nn); printf(*系统功能菜单* n);printf(友情提醒:查询前请先刷新系统! n);printf( - - n);printf( * n);printf( * 0.系统帮助及说明 * * 1.刷新学生信息 * n);printf( *

23、 n);printf( * 2.查询学生信息 * * 3.修改学生信息 * n);printf( * n);printf( * 4.增加学生信息 * * 5.按学号删除信息 * n);printf( * n);printf( * 6.显示当前信息 * * 7.保存当前学生信息* n);printf( * * n);printf( * 8.退出系统 * n);printf( * n);printf( - - n);printf(请选择菜单编号:);scanf(%d,&num);switch(num) case 0:help();break;case 1:readfile();break;case

24、 2:seek();break;case 3:modify();break;case 4:insert();break;case 5:del();break;case 6:display();break;case 7:save();break;case 8:k=0;break;default:printf(请在0-8之间选择n);五、测试结果与分析最初我们写的这样一个程序,但是运行时错误比较多,而且一些功能并没有插入,于是便放弃了这个思路,重新编写。#include #include #include #include struct student int id; char name10; i

25、nt age; char sex10;char birthady20; int tel;char nativeplace50;st50; int i=0; void shuru() char a; do printf(n请输入学号:); scanf(%d,&sti.id); fflush(stdin); printf(n请输入姓名:); gets(); printf(n) ; printf(请输入年龄:); scanf(%d,&sti.age); fflush(stdin); printf(n请输入姓别:); gets(sti.sex); fflush(stdin); prin

26、tf(n请输入生日:); gets(sti.birthady);printf(n请输入电话:); scanf(%d,&sti.tel); fflush(stdin); printf(n请输入籍贯:); gets(sti.nativeplace);printf(n是否继续输入另外一个学生信息?(y/n); fflush(stdin); a=getchar(); i+; while(a=y & i=50); void xianshi() int j; printf(t学号t姓名t年龄t性别t生日tt电话t籍贯n); for(j=0;ji;j+) printf(t%dt%st%dt%st%st%dt

27、%sn, stj.id,,stj.age,stj.sex,stj.birthady,stj.tel,stj.nativeplace); void paixu() /按年龄从大到小排序函数 int j,k; int temp; for(j=0;ji;j+) for(k=0;ki-1-j;k+) if(stk.agestk+1.age) temp=stk.age; stk.age=stk+1.age; stk+1.age=temp; xianshi(); /排序后输出 void chazhao() int m; char name20,b; do printf(n请输入想查找的学生

28、姓名:); fflush(stdin); gets(name); for(m=0;m=20) printf(nt没有找到这个学生!n); else printf(t学号t姓名t年龄t性别t生日tt电话t籍贯n); printf(t%dt%st%dt%st%st%dt%sn, stm.id,,stm.age,stm.sex,stm.birthady,stm.tel,stm.nativeplace); printf(n是否查找另一个学生的信息?(y/n); fflush(stdin); b=getchar(); while(b=y); void shanchu() char nam

29、e20,c; int a,b; do printf(n请输入要删除的学生姓名:n); fflush(stdin); gets(name); for(a=0;ai;a+) if(strcmp(name,)=0) break; for(b=a;bi) printf(t没有找到这个学生!n); else i-; xianshi(); printf(n是否继续删除另一个学生信息?(y/n) ); fflush(stdin); c=getchar(); while(c=y); void charu() shuru(); paixu(); void main() /主函数 int chan

30、ge; do system(cls); printf(=学生信息管理系统=n); printf(tt一: 输入学生信息n); printf(tt二: 显示学生信息n); printf(tt三: 查找学生信息n); printf(tt四: 删除学生信息n); printf(tt五: 插入学生信息n); printf(tt六: 退出程序n); fflush(stdin); printf(tt请输入功能选项:); scanf(%d,&change); switch(change) case 1: shuru(); break; case 2: xianshi(); break; case 3: ch

31、azhao(); break; case 4: shanchu(); break; case 5: charu(); break; case 6: break; getch(); while(change!=6); 后来便编写了当前这个程序,最初编写完毕时,出现了十五个错误和二十二个警告,其中八个错误是关于birthday函数未声明和未定义,最终检查发现声明时上一行结束时未打分号,导致系统不能识别定义,后面的好几处都是拼写错误,这都反映出我们在编程时不够细心的问题。后来为了方便起见,统一把birthday替换为time。还有的很多错误都是拼写和符号,换行错误。消除错误之后,程序便可以运行了,但

32、是有涌现出一些错误:1、“0帮助菜单”不能调用出来。2、“2搜索菜单”里面的选项只有1可以应用,2、3均不能用!3、“6显示所有信息”不可用。 检查发现:菜单二里面的子菜单2和3 选项未定义,所以会无法显示。修改后得以实现。 但是无论怎么检查,“0”以及“6”菜单都不能实现,请教了几个高手也不能找出原因。于是我们便只好做一些善后工作,尽量美化程序界面。 修改了信息显示界面和主菜单,还有一些命令的大小写拼写 。但是又出现了一个问题,显示信息时性别和时间出现在同一个选项中!目前就出现了这几个问题,我会请教高人找出他的原因的! 六、课程设计总结 1、设计过程的感受与体会学完了c语言理论课,接下来就是

33、要学以致用,否则个人认为学什么都没有意义,学期末 初开设了课程设计,为做好此设计,在老师的指导下,我和搭档开始我们初次应用c语言设计自己的第一个应用系统。 在进行课程设计之前几天,不知从何入手,一脸茫然。为什么呢?因为我们想自己自己做出来而不参考任何资料,以为这样才可体现我们的智慧和能力,其实这是大错特错的。当然也不是一味强调自己动脑自己做出来不好,从开发方面角度来说是可以的,有些东西也并不是一味的照搬照抄。抱着这样的态度迷茫了三四天只想出了一丁点大至结构。最后决定上网找资料,不查不知道,一查大吃一惊,不但自己的想法网上比比皆是,比自己的想法更完美更合理的多得看都看不完。此时真是自愧不如,如早

34、从网上借鉴,集大家之所成,加上自己的修改完善,早已做出了更好的系统结结构和想法了。现在才知道,一个人的智慧敌不过千万人智慧的集成,能借鉴的尽量借鉴,然后再修改完善,增加自己所需的功能,做出自己的特色。伟大的物理学家牛顿不也说过他之所以成功是站在伟人的肩上吗? 完成设计后,我觉得收获不少,首先是自己首次应用所学知识做出了这个学生信息管理系统,以前从未做过这样大(这是对我而言,在专业人仕看来是小菜一碟)的程序,多少心里有点甜美的感觉;而收获更大的是让我学到了怎样和他人合作完成一件任务,以及在完成的过程中如何沟通。完成设计是在一定时间内完成的,在完成这个设计时,我们做得显然有一些紧迫,我想是没有合理

35、安排好时间和开始态度不正确所致,做完后我觉得合理安排时间是非常重要的否则可能时间已到而还无法完成或完成得仓促,应合理安排时间给各个环节。 2、遇到的问题与解决方法在设计过程中,首先要解决的是自己完成还是和同学合作完成,因为这个学生信息管理系统非一个大型系统,自己做比与人合作易得多,省了不少协商讨论。但最后决定还是与同学合作,因将来走上社会工作,往往是多人合作来完成一个大项目,而不是单打独斗。因此更重要的是要学会合作。 选择了与同学合作,就先要分工和协商,共同探讨,但开始担心的是各人每个模块完成后怎样合成一个完整成功的程序,这考虑了两天(毕竟是第一次合作完成一个任务),最后决定数据结构我们都必需清楚,而我们不必去弄懂对方分到的功能模块是怎样实现的,否则变成与独自完成无甚区别,只关心对方的函数模块接收什么数据,处理后返回什么数据即可。为了完成这个程序设计,我们组做了明确的分工,而我就是负责总结的。经过了一周时间的努力工作,我们体会到了自学的乐趣。c语言程序设计是这学期才开的,也是比较难的一门课。虽然经过了一学期的学习,我仍然不敢对c语言程序设计掉以轻心,因为上课的时候经常是似懂非懂,云里雾里的,一直保持着60分万岁的态度对待c语言。所以,对待这次程序设计我使出了浑身解数,因为我们是一个组,是一个团队,在组长的带领下,我们各自有各自的任务,并

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论