合肥学院
计算机科学与技术系
课程设计报告
20## ~20## 学年第 2 学期
课程:面向过程综合设计
课程设计名称:班级档案管理系统
专业班级: 13软件工程一班
20## 年 6 月
目录
一、 需求分析
l 设计内容------------------------------------------------------3
l 任务目的------------------------------------------------------3
l 任务要求------------------------------------------------------3
二、 算法设计
l 设计思想------------------------------------------------------4
l 函数介绍------------------------------------------------------5
l 函数解释------------------------------------------------------5
三、 用户使用手册----------------------------------------------------8
四、 调试及测试-------------------------------------------------------8
五、 课程小结----------------------------------------------------------12
六、 参考文献----------------------------------------------------------14
一、 需求分析
l 设计内容:
设计一个班级档案管理系统,该系统要求对该班级学生的档案进行管理和维护,并通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。
l 设计目的:
1.通过程序设计复习本学期所学的数据类型,程序的控制过程,函数的应用,数组的应用,文件的操作。
2.通过编写程序,检查以前学习过程中的不足,补缺补差。以达到更好的学习效果。通过编写程序,复习检查C语言过程中一些隐藏的问题,把C语言基础打得更加稳固,为以后的学习工作奠定坚实的基础。
l 任务要求
(1)本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:学号、姓名、性别、年龄、备注。
(2)本系统显示这样的菜单:
请选择系统功能项:
a 学生基本信息录入
b 学生基本信息显示
c 学生基本信息保存
d 学生基本信息删除
e 学生基本信息修改(要求先输入密码)
f 学生基本信息查询
1)按学号查询
2)按姓名查询
3)按性别查询
4)按年龄查询
g. 退出系统
(3)执行一个具体的功能之后,程序将重新显示菜单。
(4)将学生基本信息保存到文件中。
(5)进入系统之前要先输入密码。
根据此结构思路,可以构建以下流程图,根据前流程图设计程序。
二、 算法设计
l 设计思想(流程图)
流程图
l 函数介绍
struct STUDENT:一个结构体类型,他能存放姓名、性别、学号、备注等不同类型数据组成的组合型的数据结构。
void main():主函数。
ST a[50]:含有50元素的结构体数组
FILE * fp:定义一个指向文件的指针变量fp.
子函数的声明:
void LuRu(); //信息录入
void XianShi(); //信息显示
void BaoCun(int n); //信息保存
void ShanChu(); //信息删除
void XiuGai(); //信息修改
void ChaXun(); //信息查询
void menu();
fp=fopen("学生信息","a +"):将fopen函数的返回值赋给指针变量fp,或者说,fp指向了学生信息这个文件。如果文件不存在,则建立一个新的文本文件。
fscanf,fprintf:用格式化的方式读写文件。
Strcmp:字符串比较函数。
程序中还用到当型循环、switch分支语句、if语句、break语句、for语句、return语句等。
system("cls");:清屏函数,使界面更简洁。本程序比较长,过于繁杂,而且运行的结果图很混乱,不够美观,在查询函数中应该及时清屏,然后跳到新的页面。
l 函数解释
void main() 主函数运用switch语句进行多功能选择。
char *mm="000000";//正确密码设为000000
printf("进入系统请输入六位数密码,你有三次机会!\n");//输入六位数密码,你有三次机会
if(NULL==(fp=fopen("学生信息.txt","r")))//指针文件
{
printf("打开读文件失败,有可能没有创建此文件");//文件为空
getch();
return;
}
for(i=0;!feof(fp);i++)//文件不为空
(1) 调用此函数可以在屏幕上现实菜单供用户选择
子函数之主菜单
void menu()
{
system("cls");//清屏
printf("\n");
printf(" ***************"); //打印出以下
printf("欢迎进入软件工程一班的学生档案管理系统");
printf("*************\n\n\n");
printf(" 请选择系统功能:\n\n");
printf(" 1:学生基本信息录入\n\n");
printf(" 2:学生基本信息显示\n\n");
printf(" 3:学生基本信息删除\n\n");
printf(" 4:学生基本信息修改\n\n");
printf(" 5:学生基本信息查询\n\n");
printf(" 0:退出系统 \n");
}
(2) 调用此函数可以录入学生的基本信息同时调用保存函数进行保存信息到学生信息文件夹中。
/*子函数1信息录入*/
void LuRu()
(3) 调用此函数可以从学生文件夹中读取源数据并显示在屏幕上。
void XianShi() /*子函数2信息显示*/
(4) 调用此函数可以把用户进行某操作后的数据进行保存,写入学生信息文件夹中以便用于其他操作。
void BaoCun(int n) /*子函数3信息保存*/
(6) 调用此函数可以把原不需要保留的信息进行删除操作。
void ShanChu() /*子函数4信息删除*/
(5) 调用此函数可以把原始数据错误的地方修改过来,但此操作要输入正确密码后方可进行修改操作。否则是无法修改原始数据的。
void XiuGai() /*子函数5信息修改*/
(6) 调用此函数用于用户进行查找,运用swtich语句可以根据学生的不同信息进行查找用户想要的信息。
void ChaXun() /*子函数6信息查询*/
l 不足之处:
本程序比较长,过于繁杂,而且运行的结果图很混乱,不够美观,在查询函数中应该及时清屏,然后跳到新的页面。
三、用户使用手册:
根据提示语对该程序进行运行,先输入密码:000000 进入主菜单,
如果输入密码器错误,你可以在输入两次,不过一天只能出入三次,三次全错只能明天再查。
主菜单有7个选择: 1.学生基本信息录入
2.学生基本信息显示
3.学生基本信息保存
4.学生基本信息删除
5.学生基本信息修改(要求先输入密码)
6.学生基本信息查询
7.退出程序
选择你所需要的任务,根据提示进行运行,如果运行不出,查看一下有没有建立文本文件及文本文件内有没有信息,如果没有需要建立一个文本文件。
查询是还可以有多种选择:(请根据你的需要进行选择)
1.按学号查询
2.按姓名查询
3.按性别查询
4.按年龄查询
再查询时仍需输入一次密码,所以一定要牢记密码。
除实现基本功能之外,还实现了密码的三次输入机会,以及密码的覆盖,以及调试时能返回上一层.
四、调试及测试
点击运行时会直接跳出窗口,先输入密码:000000,一天只有三次机会。
有可能输入密码是会跳出无文件,查看一下有没有建立文本文件及文本文件内有没有信息,如果没有需要建立一个文本文件。
根据你的需要选择1 2 3 4 5 6 0 ,由于本次测试,所以由1开始.
选择选项1时,跳出窗口,根据提示录入信息。点击y进行保存,n不保存。
选择2时
有可能会输出无文件,检查你所建立的文件内有没有输入内容,如果无内容则会输出无文件。
选择3时,对文件进行修改,此时需要再次输入密码,然后根据提示运行,不修改的原样输入。
选择5时,对文件进行查询,会有四种查询方式,根据提示运行
如果没有你所查询的东西会输出无文件
对下列不同方式查询进行调试
上图选择0是返回主菜单。本图中选择0结束进程,
五、课程小结
我们都了解课程设计的目的,主要是将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握自顶而下的设计方法,将大问题进行模块化,领会结构化程序设计的方法。
(6)熟练掌握C语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序(单步调试,设置断点、观察表达式,分块调试)和修改程序。
而经过这一段时间的学习,我基本了解了学好c语言所要具备的品质及现状所拥有的能力。也行当刚开始听到要课程设计时,真的感觉挺茫然的,因为毕竟刚接触c语言,虽说也学到了一些皮毛,但当听到要自己去编写程序时,才发现自己不会的不懂的还多着呢,要编写一个程序还是有一些困难的,当真的让我去编写程序时,真的是有点怕怕的感觉。
C语言是很难学的,这也许是因人而异,但对我来说确实是一个障碍。如今要自己完成一个课程设计,无疑是对自己的一个挑战.先是上网查找有关的资料,分析题目所需的数据,要用到哪些函数等等,将函数用些结构和语句连接起来做这个工作时,又将书本翻阅了一遍。重新获得许多东西。如带参函数的特点,以及一些语句的运用及特点等等。将工作分配到每块是我完成这个设计的主要方法,然而将每块都完成看起来比较轻松,但实际操作起来却是比较麻烦的.由于平时对C知识的积
累较为匮乏,(这可能是最主要的原因了),所以操作起来真是寸步难行,没办法,只有拿出课本找到相应的知识点,临阵磨枪.费了一番功夫,再上机调试时就是最痛苦的时候了,错误一大堆,要一个一个的修改。经过几翻调试修改之后终于可以执行了,那时还兴奋了好长时间呢,然而执行出来的结果是不令人满意的,界面不美观不说,最重要的是输入太烦琐,而且受到的限制太多,如只能以某种方式输入,且个数受限制。于是又发费了大量时间去修改,终于比较满意了,成要归功于我的指导老师和同学帮了我很多忙,也让我发现了我有好多欠缺的地方,不管怎么说,我还是完成了这个设计.虽说累了点,但我想这对我们进一步掌握C,并为下学期的能够编出程序打基础,其实这次设计本身就是对自己的一种肯定,是对自己前面一段时间学习综合水平的一个检阅。当然完成后的惊喜,只有经历过了才能体会到,而我体会到了。
在这两个星期的上机实践学习,我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对c语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对c语言中经常出现的错误也不了解,通过实践,使我在这几个方面的认识有所提高。通过实践的学习,我认到学好计算机要重视实践操作,不仅仅是学习c语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。
回顾此次课程设计,一直让我感受颇多,的确,从拿到题目到完成整个程序编程,从理论到实践,两个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,也懂得同学的重要性。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
六、参考文献
[1] 黄明等编著《C语言课程设计》北京:电子工业出版社
[2] 郭翠英编著《C语言课程设计案例精编》北京:中国水利水电出版社
[3] 宁正元《数据结构(c语言)》 南京:东南大学出版社。20##年6月第1版
[4] 严蔚敏等 《数据结构(c语言版)》 北京:清华大学出版社,1997年4月第1版
[5] 谭浩强编著《C程序设计题解与上机指导(第3版) 》北京:清华大学出版社
[6] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社
七、源程序代码
#include <stdio.h>
#include <string.h> //字符数组的函数定义的头文件.
#include <stdlib.h> //stdlib.h里面定义了五种类型、一些宏和通用工具函数.如system()
#include <conio.h> //定义了通过控制台进行数据输入和数据输出的函数.如getch()
#define true 1
#define false 0
struct STUDENT //结构体,能存放姓名、性别、学号、备注等
{
char studentNO[20]; //学号
char studentname[20]; //姓名
char studentsex[5]; //性别
int studentage; //年龄
char studentbeizhu[30]; //备注
};
typedef struct STUDENT ST;
ST a[50]; //含有50元素的结构体数组
//子函数声明
void LuRu(); //信息录入
void XianShi(); //信息显示
void BaoCun(int n); //信息保存
void ShanChu(); //信息删除
void XiuGai(); //信息修改
void ChaXun(); //信息查询
void menu();
void main() //主函数
{
int m;
int flag=true;
int i, n=0, j=0;
FILE *fp;
char *mm="000000"; //正确密码
char pass[6]; //输入密码
printf("你有三次机会输入六位数密码!\n");
do{
printf("\n第%d次验证密码:\n", j+1);
for( i=0; i<6; i++)
{
pass[i]=getch();
putchar('*');
}
pass[i]=('\0');
getchar();
if(strcmp(pass,mm)==0) //于正确密码进行比较
{
if(NULL==( fp=fopen("学生信息.txt","r"))) //定义一个full文件
{
printf("无文件!");
getch();
return;
}
for( i=0; !feof(fp); i++)
{
if(fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu) > 0)
{
++n;
}
}
if( 0==n )
{
printf(" 无记录! 按任意键返回主菜单");
getch();
}
fclose(fp);
do
{
menu();
scanf("%d", &m );
getchar();
switch( m )
{
case 1:
LuRu();
break;
case 2:
XianShi();
break;
case 3:
ShanChu();
break;
case 4:
XiuGai();
break;
case 5:
ChaXun();
break;
case 0:
flag=false;
break;
default:
printf("输入错误!请重新选择!\n");
getchar();
break;
}
}while(flag);
fclose(fp); //关闭
}
else
{
printf("密码错误!\n");
++j;
}
}while( strcmp( pass,mm) && j<3);
if( j>2 )
{
printf("sorry!你权限已用完!请明天再来!\n");
}
getchar();
}
void menu() //子函数之主菜单
{
system("cls"); //清屏
printf(" ***************");
printf("欢迎进入软件工程一班的学生档案管理系统");
printf("*************\n\n\n");
printf(" 请选择系统功能:\n\n");
printf(" 1:学生基本信息录入\n\n");
printf(" 2:学生基本信息显示\n\n");
printf(" 3:学生基本信息删除\n\n");
printf(" 4:学生基本信息修改\n\n");
printf(" 5:学生基本信息查询\n\n");
printf(" 0:退出系统 \n");
}
void LuRu() /*子函数1信息录入*/
{
int i,n;
char cYesNo; //定义一个字符串
system("cls"); //清屏
printf(" 学生基本信息录入\n");
printf("输入要录入的学生数:\n");
scanf("%d",&n);
for(i=0;i
{
printf("输入第%d个学生的其本信息:\n",i+1);
printf("学号:");
scanf("%s",a[i].studentNO);
getchar(); //回车 得到字符
printf("姓名:");
scanf("%s",a[i].studentname);
getchar();
printf("性别:");
scanf("%s",a[i].studentsex);
getchar();
printf("年龄:");
scanf("%d",&a[i].studentage);
printf("备注:");
scanf("%s",a[i].studentbeizhu);
getchar();
}
printf("\n是否保存? Y/y.是 N/n.否\n请切换至大小写选择:");
scanf("%c",&cYesNo);
getchar();
if('Y'==cYesNo || 'y'==cYesNo)
{
BaoCun(n); //调用保存子函数
}
}
void XianShi() /*子函数2信息显示*/
{
int i,n=0;
system("cls");
printf("\n 学生基本信息显示\n\n");
FILE *fp;
if(NULL==(fp=fopen("学生信息.txt","r"))) //如果打开文件为空
{
printf("打开读文件失败");
return;
}
for(i=0;!feof(fp);i++)
{
if(fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu) > 0)
{
++n;
}
}
if(0==n)
{
printf("无记录!按任意键返回主菜单");
getch();
fclose(fp);
return;
}
printf("学号 姓名 性别 年龄 其他备注\n");
for(i=0; i
{
printf("%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, a[i].studentage, a[i].studentbeizhu);
}
fclose(fp);
printf("\n按任意键返回");
getch();
}
void BaoCun(int n) /*子函数3信息保存*/
{
int i;
FILE *fp;
fp=fopen("学生信息.txt","a+");
if (fp==NULL)
{
printf("文件不存在!\n");
return;
}
if(n>0)
{
for(i=0; i
{
fprintf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, a[i].studentage, a[i].studentbeizhu);
}
if(0==i)
{
printf("保存失败!\n");
}
else
{
printf("保存成功!\n");
}
}
else
{
printf("没有信息需要保存!\n");
}
fclose(fp);
printf("按任意键返回!\n");
getch();
}
void ShanChu() /*子函数4信息删除*/
{
char number[20];
int flag;
int i,n=0;
FILE *fp;
system("cls");
printf("\n 学生基本信息删除\n");
fp=fopen("学生信息.txt","r+");
if (fp==NULL)
{
printf("文件不存在!\n");
return;
}
for(i=0;!feof(fp);i++)
{
if(fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu) > 0)
{
++n;
}
}
if(0==n)
{
printf("没有信息!\n");
getch();
fclose(fp);
return;
}
printf("输入要删除学生信息的学号\n");
scanf("%s",number);
getchar();
for (i=0; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if (!strcmp(number,a[i].studentNO))
{
for(int j=i; j
{
a[j] = a[j+1];
}
fclose(fp);
--n;
fp=fopen("学生信息.txt","w");
if (fp==NULL)
{
printf("\n文件不存在!\n");
getch();
return;
}
for(i=0; i
{
fprintf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, a[i].studentage, a[i].studentbeizhu);
}
flag=true;
printf("删除成功!\n");
printf("按任意键返回!\n");
break;
}
}
if (flag == false)
{
printf("该学生不存在!\n");
}
fclose(fp);
getch();
}
void XiuGai() /*子函数5信息修改*/
{
char number[20];
char pass[6];
int flag=false;
int i=0,n=0,m=0;
char *mm="000000";//正确密码
FILE *fp;
system("cls");
printf("\n 学生基本信息修改\n");
fp=fopen("学生信息.txt","r+");
if (fp==NULL)
{
printf("\n文件不存在!\n");
return;
}
for(i=0; !feof(fp); i++)
{
if(fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu) > 0)
{
++n;
}
}
if(0==n)
{
printf("\n没有信息!\n");
getch();
fclose(fp);
return;
}
printf("请输入六位数密码,三次验证机会:\n");
do{
printf("\n第%d次验证密码:\n",m+1);
for(i=0;i<6;i++)
{
pass[i]=getch();
putchar('*');
}
pass[i]=('\0');
getchar();
if(strcmp(pass,mm)==0)
{
char c;
printf("修改学生信息:\n");
printf("请输入学号:\n");
scanf("%s",number);
getchar();
for (i=0 ; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if (!strcmp(number, a[i].studentNO))
{
printf("学生编号 姓名 性别 年龄 其他备注\n");
printf("%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, a[i].studentage, a[i].studentbeizhu);
printf("请修改学生的其本信息:\n");
printf("学号:");
scanf("%s", a[i].studentNO); //输入信息
getchar(); //输出信息
printf("姓名:");
scanf("%s", a[i].studentname);
getchar();
printf("性别:");
scanf("%s", a[i].studentsex);
getchar();
printf("年龄:");
scanf("%d", &a[i].studentage);
getchar();
printf("备注:");
scanf("%s", a[i].studentbeizhu);
getchar();
printf("确认修改并保存吗? Y/y.是 N/n.否\n");
scanf("%c", &c);
getchar();
if(c=='Y' || c=='y')
{
fclose(fp); //关闭
fp=fopen("学生信息.txt","w");
if (fp==NULL)
{
printf("文件不存在!\n");
return;
}
for(i=0; i
{
fprintf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, a[i].studentage, a[i].studentbeizhu);
}
if(n==i)
{
printf("修改成功!\n");
}
else
{
printf("修改失败!\n");
}
}
flag=true;
break;
}
}
if(flag==false)
{
printf("该学生不存在!\n");
}
}
else
{
printf("密码错误");
++m;
}
}while(strcmp(pass,mm) && m<3);
printf("按任意键返回!\n");
getch();
fclose(fp);
}
void ChaXun() /*子函数6信息查询*/
{
system("cls");
int flag=true;
do
{
int i, term, n=0;
FILE *fp;
if(NULL==(fp=fopen("学生信息.txt","r+")))
{
printf("打开读文件失败");
return;
}
for(i=0; !feof(fp); i++)
{
if(fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu) > 0)
{
++n;
}
}
if(0==n)
{
printf("没有信息!\n");
getch();
fclose(fp);
return;
}
printf("\n 学生基本信息查询\n\n");
printf(" 1.通过学号查询 \n");
printf(" 2.通过姓名查询 \n");
printf(" 3.通过性别查询 \n");
printf(" 4.通过年龄查询 \n");
printf(" 0.返回 \n");
scanf("%d", &term);
switch (term)
{
case 1://按学号查询
{
char num[20];
int flag=false;
printf("请输入学号:\n");
scanf("%s",num);
getchar();
for(i=0; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if(!strcmp(num, a[i].studentNO))
{
printf("学号 姓名 性别 年龄 其他备注\n");
for(int j=i; j
{
fscanf(fp,"%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, &a[j].studentage, a[j].studentbeizhu);
if(!strcmp(num, a[j].studentNO))
{
printf("%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, a[j].studentage, a[j].studentbeizhu);
}
}
flag=true;
break;
}
}
if(!flag)
{
printf("该学生不存在!\n");
}
}
getch();
fclose(fp);
break;
case 2://按姓名查询
{
char name[20];
int flag=false;
printf("输入学生名字:\n");
scanf("%s", name);
getchar();
for (i=0; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if (!strcmp(name, a[i].studentname))
{
printf("学号 姓名 性别 年龄 其他备注\n");
for(int j=i; j
{
fscanf(fp,"%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, &a[j].studentage, a[j].studentbeizhu);
if(!strcmp(name,a[j].studentname))
{
printf("%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, a[j].studentage, a[j].studentbeizhu);
}
}
flag=true;
break;
}
}
if(!flag)
{
printf("该学生不存在!\n");
}
}
fclose(fp);
break;
case 3://按性别查询
{
char ch[5];
int flag=false;
printf("请输入性别:\n");
scanf("%s", ch);
getchar();
for (i=0; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if (strcmp(ch, a[i].studentsex)==0)
{
printf("学号 姓名 性别 年龄 其他备注\n");
for(int j=i; j
{
fscanf(fp,"%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, &a[j].studentage, a[j].studentbeizhu);
if(!strcmp(ch,a[j].studentsex))
{
printf("%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, a[j].studentage, a[j].studentbeizhu);
}
}
flag=true;
break;
}
}
if (!flag)
{
printf("该学生不存在!\n");
}
}
fclose(fp);
break;
case 4://按年龄查询
{
int numage;
int flag=false;
printf("请输入年龄:\n");
scanf("%d", &numage);
getchar();
for (i=0; i
{
fscanf(fp,"%s %s %s %d %s\n", a[i].studentNO, a[i].studentname, a[i].studentsex, &a[i].studentage, a[i].studentbeizhu);
if (numage==a[i].studentage)
{
printf("学号 姓名 性别 年龄 其他备注\n");
for(int j=i;j
{
fscanf(fp,"%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, &a[j].studentage, a[j].studentbeizhu);
if(numage==a[j].studentage)
{
printf("%s %s %s %d %s\n", a[j].studentNO, a[j].studentname, a[j].studentsex, a[j].studentage, a[j].studentbeizhu);
}
}
flag=true;
break;
}
}
if (!flag)
{
printf("该学生不存在!\n");
}
}
break;
case 0://退出
{
flag=false;
}
break;
default:
printf("输入错误!\n");
}
fclose(fp);
}while(flag);
}