C程序设计实习报告_学生证管理系统.doc_第1页
C程序设计实习报告_学生证管理系统.doc_第2页
C程序设计实习报告_学生证管理系统.doc_第3页
C程序设计实习报告_学生证管理系统.doc_第4页
C程序设计实习报告_学生证管理系统.doc_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

精品文档C程序设计实习报告题目:学生证管理系统学 院: 机电学院 专 业: 机械设计制造及其自动化 姓 名: 李奇 班级学号: 072095-05 指导教师: 徐凯 2011 年 7 月 16 日目录一、需求分析21.1题目要求2二、 总体设计22.1设计思想22.2 运行平台及开发环境22.3数据结构32.4系统结构简图33.1主函数33.2信息输入43.3总信息的显示53.4查询信息53.4.1 按学号查询53.4.2按班级查询63.5修改信息73.6删除信息83.7统计信息83.7.1统计班级总人数83.7.2统计学院或专业总人数93.7.3排序9四、测试结果分析94.1输入信息部分效果图94.2输出总信息效果图104.3查询信息效果图114.4修改信息效果图124.5删除效果图134.6统计信息效果图14五、心得体会15六、参考文献15七、附录15一、需求分析1.1题目要求题目:学生证管理系统该系统应该具有下列功能:(1) 录入某位学生的学生证信息(2) 给定学号,显示某位学生的学生证信息(3) 给定某个班级的班号,显示该班所有学生的学生证信息(4) 给定某位学生的学号,修改该学生的学生证信息(5) 给定某位学生的学号,删除该学生的学生证信息(6) 提供一些统计各类信息的功能输入要求:应用程序运行之后,在屏幕生显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。输出要求:(1) 应用程序运行之后,要在屏幕上显示一个菜单。(2) 要求用户输入数据时,要给出清、晰明确的提示信息,包括输入的数据内容、格式及结束方式等。提示:设计时可以采用结构体类型和以为数组类型,用来保存学生证的内容。2、 总体设计2.1设计思想经分析,整个系统可分为以下几大块:(1) 学生证信息的输入和输出:输入输出学号、班号、姓名、性别、民族、学院、专业、生日、身份证号等信息。(2) 学生证信息的保存:在输入、修改或删除后,通过文件将学生的信息保存。(3) 学生证信息的的查询:根据学号查询某学生的信息或者根据班号查找该班所有学生的信息。(4) 学生证信息的修改:根据学号修改该学生的信息。(5) 学生证信息的删除:根据学号删除该学生的信息。(6) 信息的统计:根据班号统计该班总人数、根据学院统计该学院的总人数或者根据专业统计该专业的总人数。(7) 信息的排序:按照学号从大到小对学生的信息进行排序。2.2 运行平台及开发环境此程序是在Microsoft Visual C+软件平台上编译的,具有集成开发环境,可提供编辑C语言,C+以及C+/CLI等等编程语言。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计(Windows API)、三维动画DirectX API,Microsoft .NET框架2.3数据结构综合以上的分析及开发平台特点,我决定采用结构体数据结构,将学生的基本信息与成绩设计为结构体数据,用来存放多个学生的信息,把学生的姓名、学号、宿舍号、成绩作为结构体成员,从而实现信息之间的对应输入输出。但要注意的是要用两个不同的结构体分别定义学生基本信息和学生成绩,以便于后续的一些功能的实现。2.4系统结构简图 主函数 输入模块 查询模块 修改模块 删除模块 统计模块图2-1三、详细设计3.1主函数主函数的功能是对各个子函数进行调用,并且输出一个菜单界面,只需按照菜单输入相应数字就可以选择相应功能。实现这一功能主要通过switch语句,首先通过printf函数打印出菜单,然后通过scanf函数输入数字选择菜单,经过switch语句判断调用相应的函数,从而实现预定的功能。 开始输入a,选择菜单 判断 调用相应子函数 输出结果 结束3.2信息输入在定义变量时采用结构体数据结构,学号、班号、生日、身份证号是整型,姓名、性别民族、学院、专业是字符型,采用字符型数组,但数组长度一定要足够,否则会出现数据丢失错误,考虑到姓名性别的字符长度,定义它们为长度为20的字符数组。且由于涉及到学生一系列的的基本信息,将基本信息定义为结构体。在将学生的基本信息输入时,要将其保存为.txt文件,用来存放学生的信息。这时就涉及到文件的建立和写入,由于fwrite、fread函数是以二进制形式将数据写入、读出文件的,所以在文件中会出现乱码,而fprintf、fscanf烦函数则会将ASCII码转化为二进制码,不会出现乱码,所以决定选取较为简单的fprintf函数作为写入文件的函数。首先定义一个指向文件的指针,再定义一个整型的外部变量变量N,定义整形的外部变量是为了控制输入的人数,并用for函数进行循环,在输入数据之后当然,自动调用save函数,循环N次,通过指针打开建立一个文本文件,fprintf函数自动建立一个文本文件,实现向文件中写入N组数据的功能。循环结束后文件件中已经写入要输入的信息。在程序的最后通过一个if和else判断语句,结合printf和scanf函数判断是否继续执行输入函数或者返回菜单。流程图如图3-2。 主函数 输入人数N输入N组数据 输入t调用save()函数保存信息 t=1 主函数 输入函数 N Y 图 3-2 3.3总信息的显示这部分比较简单,主要是通过主函数调用,先打开文件用fprintf函数将数据全部读入,然后经过for循环,经数据全部输出,最后通过一个if和else判断语句,结合printf和scanf函数判断是否继续执行本函数或者返回菜单。流程图如图3-3。 主函数 输出信息输入t t=1 主函数 N Y 图3-33.4查询信息3.4.1 按学号查询此函数通过主函数调用,先将文件打开读入数据,然后输入学号,经过循环查找最终确定该学生的位置,进行输出;当输入的学号没有时,会重新执行本函数。 主函数 输入学号 t=1 查找该学生 输出信息 主函数 输入t t=1 Y 图3-4 N3.4.2按班级查询此函数通过主函数调用,先将文件打开读入数据,然后输入班号,经过循环查找最终确定该班所有学生的位置,进行输出;当输入的班号没有时,会重新执行本函数。 主函数 输入班号 t=1查找该班的学生 输出信息 主函数 输入t t=1 N Y N Y 图3-53.5修改信息本程序采用的基本思路是先查找,找到之后再对信息逐条修改。查找仍是用for循环,输入一个学号,然后逐个进行比对,找到之后再输入你想修改的信息,将原数据替换,最后保存。开始仍然有对学号的判断,最后仍然有返回主菜单的判断。 输入学号 主函数 t=1 N Y 查找该学号 输入修改信息 修改 调用save()进行保存 输入t t=1 N Y 主函数 图3-63.6删除信息删除的基本思想就是后面的信息覆盖前面的信息,后面的信息被0代替,从而实现删除功能。具体实现方法就是选择删除功能,利用文件指针和fscanf函数,将文件内容读出,显示在屏幕上,让用户决定删除哪一个学生的基本信息,然后输入该学生的学号赋值给一个整型变量,利用for循环在文件中查找与该变量值相同的学生,找到之后将后面一个结构体的全部信息赋值给前面一个结构体,从而将该学生信息“删除”。同时要实现的是在存放成绩的文件中也要该同学的成绩信息删除,原理相同,就是在找到该同学的信息之后,保留循环变量的值,再对成绩文件里该同学的进行相同覆盖操作,即可实现同时在B文件删除信息。流程图如下;主菜单选择删除输入要删除的学生学号在文件中删除该学 生的所有信息 删除完毕 图3-73.7统计信息首先定义一个变量x=0,读入数据,然后输入你想统计的班号,学院或专业名称,然后通过for循环,进行比较,当数据中的班号,学院或专业名称与你输入的相同时,x+1,循环结束最后将x的值输出,即为统计的总人数。 主函数 输入班号 统计人数 输出人数3.7.1统计班级总人数 主函数判断输出人数输出人数 统计人数 统计人数 图 3-83.7.2统计学院或专业总人数 学院 专业 图3-9 3.7.3排序排序的基本思想即为“冒泡法”。在编写函数时,要注意如何实现结构体变量之间的交换,由于结构体中成员较多,数据结构较为复杂,因此需要采用中间变量进行替换。具体的操作在程序开始成绩定义结构体变量时,需要定义两组成绩结构体变量,一组用于存放数据,另一组即用来作为零时替换变量,用来接受将需要交换的变量值。首先还是需要进行问基金按内容的读出。再用冒泡法排序,冒泡法就是用第一个值分别与后面的每一个值进行比较,如果小于后一个值则交换它们的值,再将已变换过的第一个值与后面的每一个值比较,直到一个for循环结束,然后再进行相同的过程,直到一个大的for循环结束。然后将排序后的文件内容显示出来,。流程图如下:选择排序按实得学分排序读出文件内容显示结果开始图3-10以上就是各模块的详细设计,在主菜单中选择调用各个模块子的函数,从而实现不同功能。四、测试结果分析4.1输入信息部分效果图 图4-1 图4-24.2输出总信息效果图 图 4-3文件如图4-4图4-44.3查询信息效果图 图4-5 图4-6图4-74.4修改信息效果图图4-8图4-94.5删除效果图图4-10 图4-114.6统计信息效果图图4-12图4-13图4-14五、心得体会在本次实习中,我又重新熟悉了一遍c,感觉很多东西都已经遗忘了,所以在编程的时候需要不断的翻书查资料,用了很多时间,不过编程还算顺利,遇到的问题在看课本之后都解决了。程序的缺点还有很多,比如没有实现对文本的添加功能,不能在已有的数据上添加新的数据,在程序的输入和输出的地方也有很多的不足,输出的效果也不是很好。我会在以后进一步熟悉c,改掉这些缺点和错误。六、参考文献谭浩强C程序设计 第三版 清华大学出版社 2005张冬梅等C语言课程设计与实习指导 第一版 中国铁道出版社 2008七、附录主函数主函数通过菜单,用switch函数调用子函数,来实现各个模块的功能。void main()int a; void di1(); void di2(); void di3(); void di4(); void di5();void di6(); /*子函数的申明*/void di7();void di8();void di9(); printf(nn); printf( 学生证管理系统nn);printf( 菜单n); printf( * ); printf( * 1.录入学生的学生证信息 *n); printf( * 2.显示所有学生的学生证信息 *n); printf( * 3.按学号查找某学生的学生证信息 *n); printf( * 4.按班级查找某班所有学生的学生证信息 *n); printf( * 5.修改某学生的学生证信息 *n); printf( * 6.删除某学生的学生证信息 *n);printf( * 7.统计某班的总人数 *n);printf( * 8.统计某学院或某专业的总人数 *n);printf( * 9.按照学号从小到大排序并输出排序后的总信息*n);printf( * 退出请按其余的任意键 *n); printf( * ); printf(nnn); printf(请输入数字后选择菜单n); scanf(%d,&a); switch(a)case 1 : di1();break; case 2 : di2();break; case 3 : di3();break; /*选择菜单*/ case 4 : di4();break; case 5 : di5();break;case 6 : di6();break; case 7 : di7();break;case 8 : di8();break;case 9 : di9();break;default: printf(按任意键确认n);保存模块void save() /*打开一个文件并写入数据*/FILE *fp; int i; if(fp=fopen(stu_list.txt,w)=NULL)printf(cannot open filen); return; for(i=0;iN;i+)fprintf(fp,%-5d%-5d%-10s%-5s%-5s%-10s%-10s%-5d%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng);fclose(fp);录入函数void di1() /* 录入数据*/int i; int t; FILE *fp3; fp3=fopen(Num.txt,w); printf(你需要录入几位学生的信息n); scanf(%d,&N); putw(N,fp3); printf(请依次输入n); for(i=0;iN;i+) printf(第%d个学生n,i+1);printf(学号:);scanf(%d,&stui.xuehao);printf(班号:);scanf(%d,&stui.banhao);printf(姓名:); scanf(%s,);printf(性别:); scanf(%s,stui.sex);printf(民族:);scanf(%s,stui.minzu);printf(学院:); scanf(%s,stui.xueyuan);printf(专业:);scanf(%s,stui.zhuanye);printf(生日:);scanf(%d,&stui.shengri);printf(身份证:);scanf(%d,&stui.shenfenzheng);save(); fclose(fp3); printf(录入成功n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di1();显示所有学生的信息void di2() /* 显示所有学生的数据*/int i;int t; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3); printf(所有学生信息如下n ); for(i=0;iN;i+) fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,&stui.sex,&stui.minzu,&stui.xueyuan,&stui.zhuanye,&stui.shengri,&stui.shenfenzheng); printf(第%d个学生n,i+1);printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng); fclose(fp);fclose(fp3); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di2();按学号查找void di3() /* 按学号查找学生信息*/int i; int b;int t;int g=0; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3);printf(请输入您要显示的学生的学号n ); scanf(%d,&b); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,&stui.shengri,&stui.shenfenzheng);if(stui.xuehao=b)g=g+1; if(g!=0)printf(该学生信息如下n ); for(i=0;iN;i+)if(stui.xuehao=b) printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng);elseprintf(没有该学生n); fclose(fp);fclose(fp3);printf(n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di3();按班号查找void di4() /* 显示某班所有学生的数据*/int i; int c;int t;int g=0; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3);printf(请输入您要显示的班的班号n ); scanf(%d,&c); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,&stui.shengri,&stui.shenfenzheng);if(stui.banhao=c)g=g+1; if(g!=0)printf(该班的所有学生的信息如下n ); for(i=0;iN;i+)if(stui.banhao=c) printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng);elseprintf(没有该班n); fclose(fp);fclose(fp3);printf(n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di4();修改void di5() /* 按学号修改学生的信息*/int i; int d; int m; int n;int t;int g=0; char p20; char q20;char r20;char s20;char t120;int u;int v;FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3); printf(请输入您要修改的学生的学号n ); scanf(%d,&d); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,&stui.shengri,&stui.shenfenzheng);if(stui.xuehao=d)g=g+1;if(g!=0)for(i=0;iN;i+)if(stui.xuehao=d)printf(该学生的原信息如下n ); printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng); printf(请依次输入该学生的新信息n ); printf(学号:); scanf(%d,&m); printf(班号:); scanf(%d,&n); printf(姓名:); scanf(%s,p); printf(性别:); scanf(%s,q); printf(民族:); scanf(%s,r); printf(学院:); scanf(%s,s); printf(专业:); scanf(%s,t1); printf(生日:); scanf(%d,&u); printf(身份证:); scanf(%d,&v); stui.xuehao=m; stui.banhao=n; strcpy(,p); strcpy(stui.sex,q);strcpy(stui.minzu,r);strcpy(stui.xueyuan,s);strcpy(stui.zhuanye,t1);stui.shengri=u;stui.shenfenzheng=v; printf(n); printf(该学生的新信息如下(已经保存,可以查询验证)n ); printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng);save();elseprintf(没有该学生n); fclose(fp);fclose(fp3);printf(n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di5();删除void di6() /* 按学号删除学生的信息*/int i; int e;int t; int m=0; int n=0; char q20=NULL; char p20=NULL;int g=0;char r20=NULL;char s20=NULL;char t120=NULL;int u=0;int v=0; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3); printf(请输入您要删除的学生的学号n ); scanf(%d,&e); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,&stui.shengri,&stui.shenfenzheng);if(stui.xuehao=e)g=g+1;if(g!=0)for(i=0;iN;i+)if(stui.xuehao=e)printf(该学生的原信息如下n ); printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng); stui.xuehao=m; stui.banhao=n; strcpy(,p); strcpy(stui.sex,q);strcpy(stui.minzu,r);strcpy(stui.xueyuan,s);strcpy(stui.zhuanye,t1);stui.shengri=u;stui.shenfenzheng=v; printf(该学生的信息已经删除(已经保存,可以查询验证)n ); printf(学号:%-5d班号:%-5d姓名:%-10s性别:%-5s民族:%-5sn学院:%-10s专业:%-10s生日:%-5d身份证:%-5dnn,stui.xuehao,stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,stui.shengri,stui.shenfenzheng);save();elseprintf(没有该学生n); fclose(fp);fclose(fp3);printf(n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di6();统计某班学生总人数void di7() /* 统计某班的学生总数*/int i; int f;int t; int g=0; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&stui.xuehao,&stui.banhao,,stui.sex,stui.minzu,stui.xueyuan,stui.zhuanye,&stui.shengri,&stui.shenfenzheng); printf(请输入班号n ); scanf(%d,&f); for(i=0;i3;i+)if(stui.banhao=f) g=g+1; fclose(fp);fclose(fp3);if(g=0)printf(该班的总人数为:0或没有该班n);else printf(该班的总人数为:%dn,g);printf(n); printf(-返回主菜单按:1 -n); printf(-重新录入按其他任意数字-n);scanf(%d,&t);if(t=1) main();else di7();统计学院或专业的总人数void di8() /* 统计学院或专业的总人数*/int i; char x20;int y;int t; int g=0; FILE *fp;FILE *fp3;fp3=fopen(Num.txt,r); fp=fopen(stu_list.txt,r); N=getw(fp3); for(i=0;iN;i+)fscanf(fp,%d%d%s%s%s%s%s%d%d,&st

温馨提示

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

评论

0/150

提交评论