《C语言课程设计学生证管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生证管理系统.docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 C语言课程设计报告学生证管理系统C语言课程设计院系: 姓名: 学号:班号:指导教师: 日期:2010年9月 目录 一、实验目的2二、实验内容3三、需求分析3四、概要设计41.方案设计42.数据结构说明43.模块功能说明44.程序可以满足功能5五、详细设计5六、调试情况,设计技巧及体会11七、 源程序清单12实验题目学生证管理系统 一、实验目的1.熟悉C语言程序的编辑、编译链接和运行的过程,至少能够用一种编译器较熟练地编辑、编译及调试程序。 2.掌握C语言数据类型,如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。 3.熟练运用if语句和switch语句以及嵌套应用。涉及循环调用的,
2、了解并掌握三种控制语句while、do-while和for语句。 4.学习并掌握C语言定义函数的基本方法、声明函数及调用函数的方法和过程。 5. 掌握文件和文件指针的概念以及文件的定义方法,认识文件打开、关闭、读、写等文件基本操作函数。 6.掌握结构体类型变量、数组的定义和使用。 7.了解指针和链表的概念,掌握指针的定义和使用指针变量的方法以及链表的正确用法。灵活使用链表来储存学生信息。 8. 掌握数组的定义、引用以及输入输出的方法、通过字符数组存储字符串,进一步使用字符串二、实验内容 学生证的管理程序。该程序应该具有下列功能:(1) 录入某位学生的学生证信息;(2) 给定学号,显示某位学生的
3、学生证信息;(3) 给定某个班级的班号,显示该班所有学生的学生证信息;(4) 给定某位学生的学号,修改该学生的学生证信息;(5) 给定某位学生的学号,删除该学生的学生证信息;(6) 提供一些统计各类信息的功能。三、需求分析系统功能:1. 显示全部的学生证信息;2. 给定某位学生的学号或姓名,查询或修改该学生的学生证信息;3. 给定某位学生的学号或姓名,删除该学生的学生证信息;4. 增加学生信息;5. 提供一些统计各类信息的功能。例如统计学生数,班级数,每个班级的学生数;6. 能够对学号和班级进行升序和降序排序;7. 用文件的形式将录入的数据进行存储,并从其中读取数据。性能描述:各种功能都可以满
4、足;程序相对较小,因而运行时反应比较迅速,不存在响应不及时地问题。四、概要设计1.方案设计 主模块创建学生信息信息修改添加修改信息修改信息浏览按姓名按班级学生信息删除按学号排序2.数据结构说明1、建立一个小型的学生证管理系统.可对学生的信息进行管理.2、学生信息应包括学生的学号,姓名,性别,班级的信息.3、数据必须以文件形式存放.分析:首先进入信息的录入和储存,录入学生基本信息,然后储存在文件中.其次做更新操作(插入,删除,修改).然后作查询,排序等操作。3.模块功能说明luru()用于储存所输入的学生信息到指定文件chaxunx()用于按学号查找某个学生信息并打印该生信息chaxunb()
5、用于按班级查找某个学生信息并打印该生信息xiugai()用于修改某个学号的学生信息shanchu()用于按学号删除某个学生的信息tongji()用于统计学生的信息4.程序可以满足功能 1.各模块间通过菜单切换和调用2.主函数通过调用菜单函数实现对各功能模块的调用,各功能模块间根据需要可相互调用。3.程序能够保证各模块功能的独立和数据共享。4.相近功能以级联菜单的形式集成。五、详细设计主函数 主函数较多、较复杂,已经和主菜单函数合并,主菜单函数里还包括了各自的二级菜单,并已经开始了对各个函数的调用。为了程序显示的清晰可读,应先清屏之后调用菜单函数。程序void main() int n; sys
6、tem(cls); /清屏printf(欢迎使用学生证管理系统n); printf(1、录入学生信息n);printf(2、查询学生信息n);printf(3、查询班级信息n);printf(4、修改学生信息n); printf(5、删除学生信息n); printf(6、统计学生信息n); printf(7、退出 n);printf( 请输入功能代码:1-5);scanf(%d,&n);switch(n)case 1:luru();break;case 2:chaxunx();break;case 3:chaxunb();break;case 4:xiugai();break;case 5:s
7、hanchu();break;case 6:tongji();break;case 7:exit(1);break;default:printf(errorn);输入模块 用于输入学生的相关信息包括姓名、性别、学号、班级、单位,并将信息存储到stu_kard.txt文件中。 程序void luru()int i=0;FILE *fp;system(cls); printf(请输入学生信息(以空格隔开)n姓名 性别 学号 班号 单位n);scanf(%s%s%d%d%s,&studi.name,&studi.sex,&studi.xuehao,&studi.banhao,&studi.danwe
8、i);fp=fopen(stu_kard.txt,a);/追加方式打开文本文件if(fp=NULL) /打开失败 printf(cannot open filen); return;else /打开成功 if(fwrite(&studi,sizeof(struct student),1,fp)!=1) printf(file write errorn);fclose(fp); /关闭文件 return;按学号查询模块 用于按学号查询学生信息。输入所要查询的学生学号,程序读取stu_kard.txt文件中的信息查找出相关的学生信息并将其显示出来。程序void chaxunx() /查询学生信息函
9、数 int i=0;char it; int xuehao;FILE *fp;system(cls);/以下是查询某个学生的个人信息printf(是要查询学生个人信息吗? yes-y no-n 请输入:); scanf(%s,&it);if(it=y) /输入 y 表示要查询学生的个人信息printf(请输入学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r);/只读方式打开文本文件while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(x
10、uehao=studi.xuehao) printf(查询信息如下:姓名 性别 学号 班号 单位n); printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei); break; /查询到该学生信息后退出循环 if(studi.xuehao!=xuehao) printf(查无此人!); fclose(fp);else if(it=n) printf(取消查询n);else printf(输入错误!n);按班级查询模块 用于按班级查询学生信息。输入所要查询的班号,程序读取st
11、u_kard.txt文件中的信息查找出对应班级下相关的学生信息并将其显示出来。程序void chaxunb() /查询班级信息函数int i;char it;int banhao;FILE *fp;i=0;printf(是要查询学生班级信息吗? yes-y no-n 请输入:);scanf(%s,&it);if(it=y) /输入 y 表示要查询学生的班级信息printf(请输入班号:); scanf(%d,&banhao); fp=fopen(stu_kard.txt,r); printf(查询信息如下:姓名 性别 学号 班号 单位n);for(i=0;!feof(fp);i+)/循环从文件
12、总读取记录,与studi.banji相比, fread(&studi,sizeof(struct student),1,fp); if(banhao=studi.banhao) /如果banji号相同,显示该条记录 printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei);fclose(fp);else if(it=n) printf(取消查询n);else printf(输入错误!n);printf(输入任意字符结束);return;/void xiugai() /修改函
13、数 int xuehao,i; FILE *fp; i=0; system(cls); printf(请输入需要修改学生信息的学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r+a);/只读方式打开文本文件while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(xuehao=studi.xuehao) printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.b
14、anhao,studi.danwei);printf(请输入新的学生信息(以空格隔开)n姓名 性别 学号 班号 单位n); scanf(%s%s%d%d%s,&studi.name,&studi.sex,&studi.xuehao,&studi.banhao,&studi.danwei);fseek(fp,sizeof(struct student),1);fwrite(&studi,sizeof(struct student),1,fp); break; 删除模块 用于删除学生的信息。输入想要删除的学生信息的学号,程序读取stu_kard.txt文件中的信息查找出相应的学生并将其信息删除。程
15、序void shanchu() /删除函数 int xuehao,i; int j; FILE *fp; i=0; j=0; system(cls); printf(请输入需要删除学生信息的学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r+a); while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(xuehao=studi.xuehao)/查询到该学生信息后删除该学生信息 printf(%17s %5s %6d %6d %8sn,st
16、udi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei); studi.xuehao=0; studi.banhao=0; strcpy(studi.danwei, ); strcpy(studi.name, ); strcpy(studi.sex, ); fseek(fp,sizeof(struct student),1); fwrite(&studi,sizeof(struct student),1,fp); printf(删除成功!); break; fclose(fp);修改模块 用于修改学生信息。输入想要修改的学生学号,程序
17、会读取stu_kard.txt文件中的信息查找出相应的学生显示出来并且可以重新修改其学生信息。程序 void xiugai() /修改函数 int xuehao,i; FILE *fp; i=0; system(cls); printf(请输入需要修改学生信息的学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r+a);/只读方式打开文本文件while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(xuehao=studi.xuehao) pr
18、intf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei);printf(请输入新的学生信息(以空格隔开)n姓名 性别 学号 班号 单位n); scanf(%s%s%d%d%s,&studi.name,&studi.sex,&studi.xuehao,&studi.banhao,&studi.danwei);fseek(fp,sizeof(struct student),1);fwrite(&studi,sizeof(struct student),1,fp); break; 统
19、计模块 用于统计所输入的学生信息,统计的信息包括学生总人数,男生、女生人数,并且可以选择是否显示当前所存储的所有学生的信息。程序void tongji() char chr; int ren,nan,nv,i; FILE *fp; i=0; ren=0; nan=nv=0; system(cls);printf(n -统计学生信息-n); printf(是否统计当前录入的学生人数?(yes-y no-n); scanf(%s,&chr); if(chr=y) fp=fopen(stu_kard.txt,rb); for(i=0;!feof(fp);i+) fread(&studi,sizeof
20、(struct student),1,fp);if(studi.xuehao!=0) ren+; if(strcmp(studi.sex,男)=0) nan+; else if(strcmp(studi.sex,女)=0) nv+; fclose(fp); printf(当前录入的学生总人数是:); printf(%6dn,ren); printf( 其中男生人数:); printf(%6d ,nan); printf( 女生人数:); printf(%6d ,nv); elseprintf(取消操作n);/ printf(nnn是否显示所有录入学生信息?(yes-y no-n); scanf
21、(%s,&chr); if(chr=y) printf(查询信息如下:姓名 性别 学号 班号 单位n); fp=fopen(stu_kard.txt,rb); for(i=0;!feof(fp);i+) fread(&studi,sizeof(struct student),1,fp); if(studi.xuehao!=0) printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei); fclose(fp); 六、调试情况,设计技巧及体会1、运行该程序,其各个模块的界面图如
22、下:(1)主菜单函数:(2) 输入模块:(3) 查询学生信息模块:(4) 查询班级信息模块:(5) 修改学生信息模块:(6) 删除模块:(7) 统计模块:2、对自己设计进行评价我觉得我的程序比较成功,各个模块在运行中都很正常,基本满足了实习的基本要求,各个模块构成一个功能相对完整的的系统。3、在设计过程中的感受对这次实习的最大感受,便是做一个程序应该很细心,因为在编程过程中我很多地方的错误都是不细心,不认真而造成的,但在完成整个程序后,眼看各个功能模块完美的运行成功,又有一种很强的成就感。七、 源程序清单#include#include#include#include#include#incl
23、ude#define SIZE 5struct studentchar name10;char sex4;int xuehao; int banhao;char danwei10;studSIZE;typedef struct char name10;char sex4;int xuehao; int banhao;char danwei10;stu;void main();void luru();void chaxunx();void chaxunb();void xiugai();void shanchu();void tongji();void main() int n; system(
24、cls); /清屏printf( 欢迎使用学生证管理系统 n); printf(*1、录入学生信息*n);printf(*2、查询学生信息*n);printf(*3、查询班级信息*n);printf(*4、修改学生信息*n); printf(*5、删除学生信息*n); printf(*6、统计学生信息*n); printf(*7、退出 *n);printf( 请输入功能代码:1-5);scanf(%d,&n);switch(n)case 1:luru();break;case 2:chaxunx();break;case 3:chaxunb();break;case 4:xiugai();br
25、eak;case 5:shanchu();break;case 6:tongji();break;case 7:exit(1);break;default:printf(errorn);/void luru()int i=0;FILE *fp;system(cls); printf(请输入学生信息(以空格隔开)n姓名 性别 学号 班号 单位n);scanf(%s%s%d%d%s,&studi.name,&studi.sex,&studi.xuehao,&studi.banhao,&studi.danwei);fp=fopen(stu_kard.txt,a);/追加方式打开文本文件if(fp=N
26、ULL) /打开失败 printf(cannot open filen); return;else /打开成功 if(fwrite(&studi,sizeof(struct student),1,fp)!=1) printf(file write errorn);fclose(fp); /关闭文件 return;/void chaxunx() /查询学生信息函数 int i=0;char it; int xuehao;FILE *fp;system(cls);/以下是查询某个学生的个人信息printf(是要查询学生个人信息吗? yes-y no-n 请输入:); scanf(%s,&it);i
27、f(it=y) /输入 y 表示要查询学生的个人信息printf(请输入学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r);/只读方式打开文本文件while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(xuehao=studi.xuehao) printf(查询信息如下:姓名 性别 学号 班号 单位n); printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,stud
28、i.banhao,studi.danwei); break; /查询到该学生信息后退出循环 if(studi.xuehao!=xuehao) printf(查无此人!); fclose(fp);else if(it=n) printf(取消查询n);else printf(输入错误!n);/以下是查询某个班级的学生信息void chaxunb() /查询班级信息函数int i;char it;int banhao;FILE *fp;i=0;printf(是要查询学生班级信息吗? yes-y no-n 请输入:);scanf(%s,&it);if(it=y) /输入 y 表示要查询学生的班级信息
29、printf(请输入班号:); scanf(%d,&banhao); fp=fopen(stu_kard.txt,r); printf(查询信息如下:姓名 性别 学号 班号 单位n);for(i=0;!feof(fp);i+)/循环从文件总读取记录,与studi.banji相比, fread(&studi,sizeof(struct student),1,fp); if(banhao=studi.banhao) /如果banji号相同,显示该条记录 printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banh
30、ao,studi.danwei);fclose(fp);else if(it=n) printf(取消查询n);else printf(输入错误!n);printf(输入任意字符结束);return;/void xiugai() /修改函数 int xuehao,i; FILE *fp; i=0; system(cls); printf(请输入需要修改学生信息的学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r+a);/只读方式打开文本文件while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeo
31、f(struct student),1,fp); if(xuehao=studi.xuehao) printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei);printf(请输入新的学生信息(以空格隔开)n姓名 性别 学号 班号 单位n); scanf(%s%s%d%d%s,&studi.name,&studi.sex,&studi.xuehao,&studi.banhao,&studi.danwei);fseek(fp,sizeof(struct student),1);f
32、write(&studi,sizeof(struct student),1,fp); break; /void shanchu() /删除函数 int xuehao,i; int j; FILE *fp; i=0; j=0; system(cls); printf(请输入需要删除学生信息的学号:); scanf(%d,&xuehao); fp=fopen(stu_kard.txt,r+a); while(!feof(fp) /循环从文件总读取记录,与输入学号相比, fread(&studi,sizeof(struct student),1,fp); if(xuehao=studi.xuehao
33、)/查询到该学生信息后删除该学生信息 printf(%17s %5s %6d %6d %8sn,studi.name,studi.sex,studi.xuehao,studi.banhao,studi.danwei); studi.xuehao=0; studi.banhao=0; strcpy(studi.danwei, ); strcpy(studi.name, ); strcpy(studi.sex, ); fseek(fp,sizeof(struct student),1); fwrite(&studi,sizeof(struct student),1,fp); printf(删除成功
34、!); break; fclose(fp);/void tongji() char chr; int ren,nan,nv,i; FILE *fp; i=0; ren=0; nan=nv=0; system(cls);printf(n -统计学生信息-n); printf(是否统计当前录入的学生人数?(yes-y no-n); scanf(%s,&chr); if(chr=y) fp=fopen(stu_kard.txt,rb); for(i=0;!feof(fp);i+) fread(&studi,sizeof(struct student),1,fp);if(studi.xuehao!=0) ren+; if(strcmp(studi.sex,男)=0) nan+; else if(strcmp(studi.sex,女)=0) nv+; fclose(fp); printf(当前录入的学生总人数是:); printf(%6dn,ren); printf( 其中男生人数:); printf(%6d ,nan); printf( 女生人数:); printf(%6d ,nv); elseprintf(取消操作n