1、学生证管理系统课程设计报告C语言课程设计实验报告课程设计题目:学生证管理系统 姓 名: 学 号: 班 级: 专 业: 指导教师: 2014 年 1 月 2 日学生证管理系统课程设计报告1.需求分析。根据学生证管理的需要,建一个“学生证管理系统”,以方便对学生证信息的各项管理操作。要求完成:1.能对学生证信息进行录入和修改2.能按照学号和班级号显示学生证信息和更改、删除信息。2.总体设计。 根据以上分析,本系统主要包括:从键盘输入学生证信息、从指定的文件中读入学生证信息、按照学号和班号查询学生证信息、删除和修改学生证信息。(1)主函数main():定义学生结构体数组,输出操作对话框,调用录入、查
2、询、删除、输出等函数对学生证信息进行处理。(2)录入函数enter():从键盘输入学生证信息。(3)录入函数load():从文件输入学生证信息。(4)查询函数search():按学号查找记录信息。(5)查询函数display():按班级查找记录信息。(6)删除函数del():删除指定学号的学生记录。(7)修改函数modify():按照指定学号修改记录。程序功能机构图如下:学生证管理系统键盘输入学号查询文件输入班级查询删除记录修改记录 3.详细设计。本功能一共有16个函数,其中一个主函数,15个功能模块,每个功能模块都是由于主函数或其他功能模块调用,分别说明如下:1.主函数main()。 YN
3、图1.2 主程序流程图(2)键盘输入函数。键盘输入函数主要完成学生信息从屏幕输入数据,并将数据保存到文本文件中,以备后用。流程图: Y N(3)文件输入函数。文件输入函数主要完成学生信息从文件中读入数据。开始打开文件读入学生证信息是否继续关闭文件结束 YN 图1.4文件输入流程图(4)学号查询函数。学号查询函数是完成由用户输入需要查询的学号,在现有学生信息中查询是否有此学生信息存在,查到输出学生全部信息,没查到则输出“此学生部存在”信息。流程图如下:开始打开文件读入学生证信息输入查询学号查到否输出学生不存在信息关闭文件结束输入查到学生信息 YN 图1.5 学号查询流程图(5)班级查询函数。班级
4、查询函数是完成由用户输入需要查询的班级,在现有学生信息中查询此班级的全部学生信息,查到输出全部信息,没差到则输出“此班级学生不存在”信息。开始打开文件读入学生信息输入查询班号查到否?输出此班级学生不存在信息关闭文件结束输出查到学生信息 Y N(6)学号删除函数。学号删除函数是完成由用户输入需要删除的学号,在现有学生信息中查询是否有该学生信息存在,查到则删除此学生全部信息,没查到则输出“此学生不存在”信息。 程序流程图如下:开始打开文件读入学生信息输入删除学号找到否?输入此学生不存在信息关闭文件结束删除此学生信息 YN(7)修改函数。修改函数主要是完成根据学号查找到学生信息,输出学生信息,然后修
5、改学生信息。程序流程如下:开始打开文件读入学生学号输入修改学号找到否?输出此学生不存在信息关闭文件结束修改此学生信息 Y N 图1.7 学号修改流程图4测试结果。(1)程序运行主菜单 1.9 主菜单界面(2)从文件输入并显示结果(3)按学号查找。(4)修改测试。(5)按班号浏览。(6)统计班级的人数。(7)删除功能测试。5.软件操作使用说明书。本软件采用命令行对话方式进行操作,运行后出现主界面如图1.9所示,然后按菜单提示操作即可。6.总结。通过本次课程设计练习,我们学会了科学分析问题解决问题的方法,从问题分析下手,然后进行模块设计,详细设计,再进行代码编写和测试。在调试程序过程中,学会了分模
6、块进行,避免了以前那种将程序全部功能都放在main()函数中完成的弊病,使得调试过程更加顺利。另外通过本次练习,在前面学习过程中碰到的诸如结构体使用.指针使用.函数之间参数传递等难点问题也迎刃而解了。源代码:/student.h#include /I/O函数 #include /标准库函数#include /字符串函数#include /字符操作函数#define M 50 /定义常数表示记录数typedef struct /定义数据结构 char no20; /学号char name20; /姓名char sex5; /性别char classes20; /班号char subject20;
7、 /学院专业STUDENTS;/以下是函数原型#includestufun.h/student.cpp/菜单函数,函数返回值为整数,代表所选的菜单项 .int menu_select() char s80; int c; printf(*主菜单*n); printf(* 0. 输入学生证信息记录 *n); printf(* 1. 浏览学生证信息记录 *n); printf(* 2. 按学号查找 *n); printf(* 3. 按学号删除 *n); printf(* 4. 按学号修改 *n); printf(* 5. 插入学生记录 *n); printf(* 6. 保存记录到文件 *n); p
8、rintf(* 7. 加载文件到内存 *n); printf(* 8. 按班号浏览 *n); printf(* 9.统计班级人数 *n); printf(* 10.程序退出 *n); printf(*n); do printf(n 输入您的菜单选项编号(0-10):); /提示输入选项 scanf(%s,s); /输入选择项 c=atoi(s); /将输入的字符串转化为整型数 getchar(); while(c10); /选择项不在010之间重输 return c; /返回选择项,主程序根据该数调用相应的函数 /输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度 .int ente
9、r(STUDENTS t) int i,n; system(cls); printf(n请输入学生记录条数:n); scanf(%d,&n); /输入记录数 printf(请输入学生记录:n); printf(学号 姓名 性别 班号 学院专业n); printf(-n); for (i=0;in;i+) scanf(%s,ti.no); /输入学号 scanf(%s,ti.name); /输入姓名 scanf(%s,ti.sex); /输入性别 scanf(%s,ti.classes); /输入班号 scanf(%s,ti.subject); /学院专业 getchar(); return n
10、; /返回记录条数 /显示记录,参数为记录数组和记录条数 .void list(STUDENTS t,int n) int i; system(cls); printf(n*学生清单*n); printf(学号 姓名 性别 班号 学院专业n); printf(-n); for(i=0;i0) /判断输出是否达到10条记录 printf(-n); printf(每页显示10条学生记录,按回车键向后翻页.n); getchar(); system(cls); printf(n*学生清单*n); printf(学号 姓名 性别 班号 学院专业n); printf(-n); printf(-n); /
11、查找记录 .void search(STUDENTS t,int n) char s20; /保存待查找学号字符串 int i; /保存查找到结点的序号 system(cls); printf(请输入查找的学号:n); scanf(%s,s); /输入待查找学号 getchar(); i=find_no(t,n,s); /调用find_no函数,得到一个整数 if(in-1) /如果整数i值大于n-1,说明没找到 printf(没有学号为%s的学生!n,s); else print(ti); /找到,调用显示函数显示记录 /删除函数,参数为记录数组和记录条数 .int del(STUDENTS
12、 t,int n) char s20; /要删除记录的学号 int ch=0; int i; printf(请输入要删除的学生学号:n); scanf(%s,s); /输入学号 getchar(); i=find_no(t,n,s); /调用find_no函数 if(i=n) printf(没有找到学号为%s的学生!n,s); else printf(正在删除中!n); for(;i0) printf(请输入插入位置的姓名,将新记录插入在该名字前:n); scanf(%s,s); /输入插入位置的姓名 getchar(); i=find_name(t,n,s); /调用find_name,确定
13、插入位置 else i=0; for(j=n-1;j=i;j-) /从最后一个结点开始向后移动一条 strcpy(tj+1.no,tj.no); /当前记录的学号拷贝到后一条 strcpy(tj+1.name,tj.name); /当前记录的姓名拷贝到后一条 strcpy(tj+1.sex,tj.sex); /当前记录的性别拷贝到后一条 strcpy(tj+1.classes,tj.classes); /当前记录的班号拷贝到后一条 strcpy(tj+1.subject,tj.subject); /当前记录的学院专业拷贝到后一条 strcpy(ti.no,temp.no); /将新插入记录的学
14、号拷贝到第i个位置 strcpy(ti.name,temp.name); /将新插入记录的姓名拷贝到第i个位置 strcpy(ti.sex,temp.sex); /将新插入记录的性别拷贝到第i个位置 strcpy(ti.classes,temp.classes); strcpy(ti.subject,temp.subject); /将新插入记录的年龄拷贝到第i个位置 n+; /记录数加1 return n; /返回记录数 /保存函数,参数为结构体数组和记录数 .void save(STUDENTS t,int n) int i; FILE *fp; /指向文件的指针 if(fp=fopen(r
15、ecord.txt,wb)=NULL) /打开文件,并判断打开是否正常 printf(无法打开学生记录文件!n); /打开失败 exit(1); /退出 printf(n正在保存中n); fprintf(fp,%d,n); /将记录数写入文件 fprintf(fp,rn); /将换行符号写入文件 for(i=0;in;i+) fprintf(fp,%-20s%-30s%-10s%-10s%-10s,ti.no,ti.name,ti.sex,ti.classes,ti.subject); /格式写入记录 fprintf(fp,rn); /将换行符号写入文件 fclose(fp); /关闭文件 p
16、rintf(*保存成功*n); /显示保存成功 /读入函数,参数为结构体数组 .int load(STUDENTS t) int i,n; FILE *fp; /指向文件的指针 if(fp=fopen(record.txt,rb)=NULL) /打开文件 printf(无法打开学生记录文件!n); /打开失败 exit(1); /退出 fscanf(fp,%d,&n); /读入记录数 for(i=0;in-1) printf(没有班号为%d的班级n,s); else printf(n*学生清单*n); printf(学号 姓名 性别 班号 学院专业n); printf(-n-); for(i=
17、0;in-1) printf(没有班号为%d的班级n,s); else int j=0; for(i=0;in;i+) if(strcmp(s,ti.classes)=0) j+; printf(该班一共有%d人n,j); /显示指定的一条记录 void print(STUDENTS temp) printf(n*n); printf(学号 姓名 性别 班号 学院专业n); printf(-n); printf(%-20s%-20s%-10s%-10s%-10sn,temp.no,temp.name,temp.sex,temp.classes,temp.subject); printf(-n); /按姓名查找函数,参数为记录数组和记录条数以及姓名s .int find_name(STUDENTS t,int n,char *s) int i; for(i=0;in;i+) /记录开始,直到最后一条 if(strcmp(s,ti.name)=0) /记录中的姓名
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1