学生证管理系统课程设计报告.docx
《学生证管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《学生证管理系统课程设计报告.docx(30页珍藏版)》请在冰豆网上搜索。
学生证管理系统课程设计报告
C语言课程设计实验报告
课程设计题目:
学生证管理系统
姓名:
学号:
班级:
专业:
指导教师:
2014年1月2日
1。
需求分析。
根据学生证管理的需要,建一个“学生证管理系统”,以方便对学生证信息的各项管理操作。
要求完成:
能对学生证信息进行录入和修改2。
能按照学号和班级号显示学生证信息和更改、删除信息。
2。
总体设计。
根据以上分析,本系统主要包括:
从键盘输入学生证信息、从指定的文件中读入学生证信息、按照学号和班号查询学生证信息、删除和修改学生证信息。
(1)主函数main():
定义学生结构体数组,输出操作对话框,调用录入、查询、删除、输出等函数对学生证信息进行处理。
(2)录入函数enter():
从键盘输入学生证信息。
(3)录入函数load():
从文件输入学生证信息.
(4)查询函数search():
按学号查找记录信息。
(5)查询函数display():
按班级查找记录信息。
(6)删除函数del():
删除指定学号的学生记录。
(7)修改函数modify():
按照指定学号修改记录。
程序功能机构图如下:
3.详细设计。
本功能一共有16个函数,其中一个主函数,15个功能模块,每个功能模块都是由于主函数或其他功能模块调用,分别说明如下:
1.主函数main()。
Y
N
图1.2主程序流程图
(2)键盘输入函数.
键盘输入函数主要完成学生信息从屏幕输入数据,并将数据保存到文本文件中,以备后用。
流程图:
(3)文件输入函数。
文件输入函数主要完成学生信息从文件中读入数据.
图1。
4文件输入流程图
(4)学号查询函数。
学号查询函数是完成由用户输入需要查询的学号,在现有学生信息中查询是否有此学生信息存在,查到输出学生全部信息,没查到则输出“此学生部存在”信息。
流程图如下:
5学号查询流程图
(5)班级查询函数.
班级查询函数是完成由用户输入需要查询的班级,在现有学生信息中查询此班级的全部学生信息,查到输出全部信息,没差到则输出“此班级学生不存在"信息。
(6)学号删除函数。
学号删除函数是完成由用户输入需要删除的学号,在现有学生信息中查询是否有该学生信息存在,查到则删除此学生全部信息,没查到则输出“此学生不存在”信息。
程序流程图如下:
(7)修改函数。
修改函数主要是完成根据学号查找到学生信息,输出学生信息,然后修改学生信息.
程序流程如下:
7学号修改流程图
4.测试结果。
(1)程序运行主菜单
9主菜单界面
(2)从文件输入并显示结果
(3)按学号查找.
(4)修改测试。
(5)按班号浏览。
(6)统计班级的人数.
(7)删除功能测试。
5.软件操作使用说明书。
本软件采用命令行对话方式进行操作,运行后出现主界面如图1。
9所示,然后按菜单提示操作即可。
6。
总结。
通过本次课程设计练习,我们学会了科学分析问题解决问题的方法,从问题分析下手,然后进行模块设计,详细设计,再进行代码编写和测试。
在调试程序过程中,学会了分模块进行,避免了以前那种将程序全部功能都放在main()函数中完成的弊病,使得调试过程更加顺利.另外通过本次练习,在前面学习过程中碰到的诸如结构体使用.指针使用.函数之间参数传递等难点问题也迎刃而解了。
源代码:
//student.h
#include〈stdio.h〉//I/O函数
#include〈stdlib。
h〉//标准库函数
#include〈string.h>//字符串函数
#includeh〉//字符操作函数#defineM50//定义常数表示记录数typedefstruct//定义数据结构{charno[20];//学号charname[20];//姓名charsex[5];//性别charclasses[20];//班号charsubject[20];//学院专业}STUDENTS;//以下是函数原型#include"stufun。h”//student。cpp//菜单函数,函数返回值为整数,代表所选的菜单项。..。.。.。。.。。。..。....。。。...。...。。intmenu_select(){chars[80];intc;printf(”******************************主菜单*********************\n");printf(”*0.输入学生证信息记录*\n");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(”*10.程序退出*\n”);printf("*********************************************************\n”);do{printf("\n输入您的菜单选项编号(0—10):”);//提示输入选项scanf(”%s”,s);//输入选择项c=atoi(s);//将输入的字符串转化为整型数getchar();}while(c<0||c>10);//选择项不在0~10之间重输returnc;//返回选择项,主程序根据该数调用相应的函数}//输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度。。。。.。。。。.。.。..。.。。。。。.intenter(STUDENTSt[]){inti,n;system("cls");printf("\n请输入学生记录条数:\n");scanf(”%d”,&n);//输入记录数printf("请输入学生记录:\n”);printf(”学号姓名性别班号学院专业\n");printf(”—--—-—----—-————---—-————-------——---——--—--—---——--—--—-——--—--——-—---—\n”);for(i=0;i{scanf("%s",t[i]。no);//输入学号scanf(”%s",t[i]。name);//输入姓名scanf("%s",t[i]。sex);//输入性别scanf("%s",t[i].classes);//输入班号scanf(”%s",t[i]。subject);//学院专业}getchar();returnn;//返回记录条数}//显示记录,参数为记录数组和记录条数。.....。。。。。。。.。.。。。。。。..。voidlist(STUDENTSt[],intn){inti;system(”cls”);printf("\n********************学生清单************************\n");printf(”学号姓名性别班号学院专业\n");printf(”———-——-----—-—-—--———----——--——-—--—-——-————-—-——-———-—————-——-—--—-----\n");for(i=0;i〈n;i++){printf("%-20s%—20s%-10s%-10s%-10s\n",t[i].no,t[i]。name,t[i]。sex,t[i]。classes,t[i].subject);if((i+1)%10==0&&n%10>0)//判断输出是否达到10条记录{printf(”------—-—-—--—-—---——-—---—---—-——--—-——-—-——---—--———--—-—-—--—--—--———\n”);printf("每页显示10条学生记录,按回车键向后翻页.。.\n”);getchar();system(”cls");printf(”\n********************学生清单************************\n");printf(”学号姓名性别班号学院专业\n");printf(”-—----—-——-————-—--—--—-—-—----—--—----—-———-----—--—--——--—-—--————-—--\n”);}}printf("--——-———--———-——-———-——-—--————--——-—————--——-————-——--—-—-—-———-—--———-\n");}//查找记录..。..。。.。.。..。。......。。.。。voidsearch(STUDENTSt[],intn){chars[20];//保存待查找学号字符串inti;//保存查找到结点的序号system(”cls”);printf(”请输入查找的学号:\n”);scanf("%s",s);//输入待查找学号getchar();i=find_no(t,n,s);//调用find_no函数,得到一个整数if(i>n—1)//如果整数i值大于n—1,说明没找到printf(”没有学号为%s的学生!\n”,s);elseprint(t[i]);//找到,调用显示函数显示记录}//删除函数,参数为记录数组和记录条数。。。.。..。。.。...。.。.。。.。。。。..intdel(STUDENTSt[],intn){chars[20];//要删除记录的学号intch=0;inti;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(;i〈n;i++)//从删除位置开始依次前移学生记录{strcpy(t[i]。name,t[i+1].name);strcpy(t[i]。no,t[i+1]。no);strcpy(t[i]。sex,t[i+1].sex);strcpy(t[i].classes,t[i+1]。classes);strcpy(t[i].subject,t[i+1]。subject);}n-—;//删除后记录数减1printf(”删除成功!\n");}returnn;//返回记录数}//插入记录函数,参数为结构体数组和记录数。...。..。..。。。。。.。。。。。。。..。。.。。.。。intadd(STUDENTSt[],intn){STUDENTStemp;//新插入记录信息inti,j;chars[20];//确定插入在哪个记录之前printf("请输入要插入的学生记录:\n”);printf(”************************************************\n");printf("学号姓名性别班号学院专业\n");printf("——-----—---—-——--—-—-—-————-———----——--———-—-——--———-—-—-—--———-—---——--\n”);scanf(”%s%s%s%s%s”,temp.no,temp。name,temp。sex,temp.classes,temp。subject);//输入插入信息getchar();printf(”—-——-——-—-—-—-—--—-——--———-—-----——-————-——-—---———-——-—-----———-——-----\n");if(n〉0){printf(”请输入插入位置的姓名,将新记录插入在该名字前:\n”);scanf("%s”,s);//输入插入位置的姓名getchar();i=find_name(t,n,s);//调用find_name,确定插入位置}elsei=0;for(j=n—1;j>=i;j—-)//从最后一个结点开始向后移动一条{strcpy(t[j+1].no,t[j].no);//当前记录的学号拷贝到后一条strcpy(t[j+1].name,t[j].name);//当前记录的姓名拷贝到后一条strcpy(t[j+1].sex,t[j].sex);//当前记录的性别拷贝到后一条strcpy(t[j+1].classes,t[j]。classes);//当前记录的班号拷贝到后一条strcpy(t[j+1].subject,t[j].subject);//当前记录的学院专业拷贝到后一条}strcpy(t[i]。no,temp。no);//将新插入记录的学号拷贝到第i个位置strcpy(t[i]。name,temp.name);//将新插入记录的姓名拷贝到第i个位置strcpy(t[i].sex,temp。sex);//将新插入记录的性别拷贝到第i个位置strcpy(t[i].classes,temp.classes);strcpy(t[i].subject,temp。subject);//将新插入记录的年龄拷贝到第i个位置n++;//记录数加1returnn;//返回记录数}//保存函数,参数为结构体数组和记录数。。。.。。.。。.....。。.。。。。....。。.。。.。。。voidsave(STUDENTSt[],intn){inti;FILE*fp;//指向文件的指针if((fp=fopen("record。txt","wb”))==NULL)//打开文件,并判断打开是否正常{printf("无法打开学生记录文件!\n");//打开失败exit(1);//退出}printf(”\n正在保存中\n");fprintf(fp,”%d”,n);//将记录数写入文件fprintf(fp,”\r\n");//将换行符号写入文件for(i=0;i〈n;i++){fprintf(fp,”%-20s%—30s%-10s%—10s%-10s”,t[i]。no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject);//格式写入记录fprintf(fp,”\r\n”);//将换行符号写入文件}fclose(fp);//关闭文件printf("****保存成功***\n");//显示保存成功}//读入函数,参数为结构体数组.。。。。。。。。。.。。。...。..。.。.。。.。.intload(STUDENTSt[]){inti,n;FILE*fp;//指向文件的指针if((fp=fopen(”record.txt",”rb”))==NULL)//打开文件{printf(”无法打开学生记录文件!\n");//打开失败exit(1);//退出}fscanf(fp,"%d”,&n);//读入记录数for(i=0;ifscanf(fp,"%20s%30s%10s%10s%10s”,t[i]。no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject);//按格式读入记录fclose(fp);//关闭文件printf("已经成功加载学生记录文件到内存!\n”);//显示保存成功returnn;//返回记录数}//按班号显示记录函数。....。。。。。.。。.。。.。。。。。。.。.。.。....voiddisplay(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s”,s);//输入班号getchar();i=find_classes(t,n,s);if(i>n—1)printf("没有班号为%d的班级\n",s);else{printf(”\n********************学生清单************************\n”);printf("学号姓名性别班号学院专业\n");printf(”—-———----—----—---—-————-—--———-—-------—-—-—-——-—---—-————-—----—---——-\n—");for(i=0;i{if(strcmp(s,t[i].classes)==0){printf("%—20s%—20s%—10s%-10s%-10s\n",t[i].no,t[i]。name,t[i].sex,t[i]。classes,t[i]。subject);}}printf("--————--——-—----—-—--—————-—-—-———-—---—--——--————-——----—---——-—-—-————\n—");}}//按班号统计人数。..。。..。voidclasscount(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s",s);//输入班号getchar();i=find_classes(t,n,s);if(i〉n—1)printf(”没有班号为%d的班级\n",s);else{intj=0;for(i=0;i〈n;i++)if(strcmp(s,t[i].classes)==0)j++;printf("该班一共有%d人\n”,j);}}//显示指定的一条记录voidprint(STUDENTStemp){printf(”\n****************************************************\n");printf(”学号姓名性别班号学院专业\n");printf("-—--———--—-———-——--———--—---—-—--—-—-————-———-—--—--—-——---—-------—--—-\n”);printf("%—20s%—20s%-10s%-10s%-10s\n",temp。no,temp.name,temp。sex,temp。classes,temp。subject);printf("--—-————————----—-—-———-—————------—--——--—-—---—-—-—----———---————-----\n”);}//按姓名查找函数,参数为记录数组和记录条数以及姓名s。。..。。.。.。。...。.。。。..。。。。。。.。。。.。..intfind_name(STUDENTSt[],intn,char*s){inti;for(i=0;i{if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记录的下标号,程序提前结束}returni;//返回i值}//按班号查找函数,参数为记录数组和记录条数以及姓名s.。..。.。.。。.。。.。。。。。。.。..。。.。。。...。.intfind_classes(STUDENTSt[],intn,char*s){inti;for(i=0;i〈n;i++)//记录开始,直到最后一条{if(strcmp(s,t[i]。classes)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记
h〉//字符操作函数
#defineM50//定义常数表示记录数
typedefstruct//定义数据结构
{
charno[20];//学号
charname[20];//姓名
charsex[5];//性别
charclasses[20];//班号
charsubject[20];//学院专业
}STUDENTS;
//以下是函数原型
#include"stufun。
h”
//student。
cpp
//菜单函数,函数返回值为整数,代表所选的菜单项。
..。
.。
。
....。
...。
intmenu_select()
{
chars[80];
intc;
printf(”******************************主菜单*********************\n");
printf(”*0.输入学生证信息记录*\n");
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(”*10.程序退出*\n”);
printf("*********************************************************\n”);
do
printf("\n输入您的菜单选项编号(0—10):
”);//提示输入选项
scanf(”%s”,s);//输入选择项
c=atoi(s);//将输入的字符串转化为整型数
getchar();
}while(c<0||c>10);//选择项不在0~10之间重输
returnc;//返回选择项,主程序根据该数调用相应的函数
}
//输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度。
.
intenter(STUDENTSt[])
inti,n;
system("cls");
printf("\n请输入学生记录条数:
\n");
scanf(”%d”,&n);//输入记录数
printf("请输入学生记录:
\n”);
printf(”学号姓名性别班号学院专业\n");
printf(”—--—-—----—-————---—-————-------——---——--—--—---——--—--—-——--—--——-—---—\n”);
for(i=0;i{scanf("%s",t[i]。no);//输入学号scanf(”%s",t[i]。name);//输入姓名scanf("%s",t[i]。sex);//输入性别scanf("%s",t[i].classes);//输入班号scanf(”%s",t[i]。subject);//学院专业}getchar();returnn;//返回记录条数}//显示记录,参数为记录数组和记录条数。.....。。。。。。。.。.。。。。。。..。voidlist(STUDENTSt[],intn){inti;system(”cls”);printf("\n********************学生清单************************\n");printf(”学号姓名性别班号学院专业\n");printf(”———-——-----—-—-—--———----——--——-—--—-——-————-—-——-———-—————-——-—--—-----\n");for(i=0;i〈n;i++){printf("%-20s%—20s%-10s%-10s%-10s\n",t[i].no,t[i]。name,t[i]。sex,t[i]。classes,t[i].subject);if((i+1)%10==0&&n%10>0)//判断输出是否达到10条记录{printf(”------—-—-—--—-—---——-—---—---—-——--—-——-—-——---—--———--—-—-—--—--—--———\n”);printf("每页显示10条学生记录,按回车键向后翻页.。.\n”);getchar();system(”cls");printf(”\n********************学生清单************************\n");printf(”学号姓名性别班号学院专业\n");printf(”-—----—-——-————-—--—--—-—-—----—--—----—-———-----—--—--——--—-—--————-—--\n”);}}printf("--——-———--———-——-———-——-—--————--——-—————--——-————-——--—-—-—-———-—--———-\n");}//查找记录..。..。。.。.。..。。......。。.。。voidsearch(STUDENTSt[],intn){chars[20];//保存待查找学号字符串inti;//保存查找到结点的序号system(”cls”);printf(”请输入查找的学号:\n”);scanf("%s",s);//输入待查找学号getchar();i=find_no(t,n,s);//调用find_no函数,得到一个整数if(i>n—1)//如果整数i值大于n—1,说明没找到printf(”没有学号为%s的学生!\n”,s);elseprint(t[i]);//找到,调用显示函数显示记录}//删除函数,参数为记录数组和记录条数。。。.。..。。.。...。.。.。。.。。。。..intdel(STUDENTSt[],intn){chars[20];//要删除记录的学号intch=0;inti;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(;i〈n;i++)//从删除位置开始依次前移学生记录{strcpy(t[i]。name,t[i+1].name);strcpy(t[i]。no,t[i+1]。no);strcpy(t[i]。sex,t[i+1].sex);strcpy(t[i].classes,t[i+1]。classes);strcpy(t[i].subject,t[i+1]。subject);}n-—;//删除后记录数减1printf(”删除成功!\n");}returnn;//返回记录数}//插入记录函数,参数为结构体数组和记录数。...。..。..。。。。。.。。。。。。。..。。.。。.。。intadd(STUDENTSt[],intn){STUDENTStemp;//新插入记录信息inti,j;chars[20];//确定插入在哪个记录之前printf("请输入要插入的学生记录:\n”);printf(”************************************************\n");printf("学号姓名性别班号学院专业\n");printf("——-----—---—-——--—-—-—-————-———----——--———-—-——--———-—-—-—--———-—---——--\n”);scanf(”%s%s%s%s%s”,temp.no,temp。name,temp。sex,temp.classes,temp。subject);//输入插入信息getchar();printf(”—-——-——-—-—-—-—--—-——--———-—-----——-————-——-—---———-——-—-----———-——-----\n");if(n〉0){printf(”请输入插入位置的姓名,将新记录插入在该名字前:\n”);scanf("%s”,s);//输入插入位置的姓名getchar();i=find_name(t,n,s);//调用find_name,确定插入位置}elsei=0;for(j=n—1;j>=i;j—-)//从最后一个结点开始向后移动一条{strcpy(t[j+1].no,t[j].no);//当前记录的学号拷贝到后一条strcpy(t[j+1].name,t[j].name);//当前记录的姓名拷贝到后一条strcpy(t[j+1].sex,t[j].sex);//当前记录的性别拷贝到后一条strcpy(t[j+1].classes,t[j]。classes);//当前记录的班号拷贝到后一条strcpy(t[j+1].subject,t[j].subject);//当前记录的学院专业拷贝到后一条}strcpy(t[i]。no,temp。no);//将新插入记录的学号拷贝到第i个位置strcpy(t[i]。name,temp.name);//将新插入记录的姓名拷贝到第i个位置strcpy(t[i].sex,temp。sex);//将新插入记录的性别拷贝到第i个位置strcpy(t[i].classes,temp.classes);strcpy(t[i].subject,temp。subject);//将新插入记录的年龄拷贝到第i个位置n++;//记录数加1returnn;//返回记录数}//保存函数,参数为结构体数组和记录数。。。.。。.。。.....。。.。。。。....。。.。。.。。。voidsave(STUDENTSt[],intn){inti;FILE*fp;//指向文件的指针if((fp=fopen("record。txt","wb”))==NULL)//打开文件,并判断打开是否正常{printf("无法打开学生记录文件!\n");//打开失败exit(1);//退出}printf(”\n正在保存中\n");fprintf(fp,”%d”,n);//将记录数写入文件fprintf(fp,”\r\n");//将换行符号写入文件for(i=0;i〈n;i++){fprintf(fp,”%-20s%—30s%-10s%—10s%-10s”,t[i]。no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject);//格式写入记录fprintf(fp,”\r\n”);//将换行符号写入文件}fclose(fp);//关闭文件printf("****保存成功***\n");//显示保存成功}//读入函数,参数为结构体数组.。。。。。。。。。.。。。...。..。.。.。。.。.intload(STUDENTSt[]){inti,n;FILE*fp;//指向文件的指针if((fp=fopen(”record.txt",”rb”))==NULL)//打开文件{printf(”无法打开学生记录文件!\n");//打开失败exit(1);//退出}fscanf(fp,"%d”,&n);//读入记录数for(i=0;ifscanf(fp,"%20s%30s%10s%10s%10s”,t[i]。no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject);//按格式读入记录fclose(fp);//关闭文件printf("已经成功加载学生记录文件到内存!\n”);//显示保存成功returnn;//返回记录数}//按班号显示记录函数。....。。。。。.。。.。。.。。。。。。.。.。.。....voiddisplay(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s”,s);//输入班号getchar();i=find_classes(t,n,s);if(i>n—1)printf("没有班号为%d的班级\n",s);else{printf(”\n********************学生清单************************\n”);printf("学号姓名性别班号学院专业\n");printf(”—-———----—----—---—-————-—--———-—-------—-—-—-——-—---—-————-—----—---——-\n—");for(i=0;i{if(strcmp(s,t[i].classes)==0){printf("%—20s%—20s%—10s%-10s%-10s\n",t[i].no,t[i]。name,t[i].sex,t[i]。classes,t[i]。subject);}}printf("--————--——-—----—-—--—————-—-—-———-—---—--——--————-——----—---——-—-—-————\n—");}}//按班号统计人数。..。。..。voidclasscount(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s",s);//输入班号getchar();i=find_classes(t,n,s);if(i〉n—1)printf(”没有班号为%d的班级\n",s);else{intj=0;for(i=0;i〈n;i++)if(strcmp(s,t[i].classes)==0)j++;printf("该班一共有%d人\n”,j);}}//显示指定的一条记录voidprint(STUDENTStemp){printf(”\n****************************************************\n");printf(”学号姓名性别班号学院专业\n");printf("-—--———--—-———-——--———--—---—-—--—-—-————-———-—--—--—-——---—-------—--—-\n”);printf("%—20s%—20s%-10s%-10s%-10s\n",temp。no,temp.name,temp。sex,temp。classes,temp。subject);printf("--—-————————----—-—-———-—————------—--——--—-—---—-—-—----———---————-----\n”);}//按姓名查找函数,参数为记录数组和记录条数以及姓名s。。..。。.。.。。...。.。。。..。。。。。。.。。。.。..intfind_name(STUDENTSt[],intn,char*s){inti;for(i=0;i{if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记录的下标号,程序提前结束}returni;//返回i值}//按班号查找函数,参数为记录数组和记录条数以及姓名s.。..。.。.。。.。。.。。。。。。.。..。。.。。。...。.intfind_classes(STUDENTSt[],intn,char*s){inti;for(i=0;i〈n;i++)//记录开始,直到最后一条{if(strcmp(s,t[i]。classes)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记
scanf("%s",t[i]。
no);//输入学号
scanf(”%s",t[i]。
name);//输入姓名
scanf("%s",t[i]。
sex);//输入性别
scanf("%s",t[i].classes);//输入班号
scanf(”%s",t[i]。
subject);//学院专业
}
returnn;//返回记录条数
//显示记录,参数为记录数组和记录条数。
.....。
voidlist(STUDENTSt[],intn)
inti;
system(”cls”);
printf("\n********************学生清单************************\n");
printf(”———-——-----—-—-—--———----——--——-—--—-——-————-—-——-———-—————-——-—--—-----\n");
for(i=0;i〈n;i++)
printf("%-20s%—20s%-10s%-10s%-10s\n",t[i].no,t[i]。
name,t[i]。
sex,t[i]。
classes,t[i].subject);
if((i+1)%10==0&&n%10>0)//判断输出是否达到10条记录
printf(”------—-—-—--—-—---——-—---—---—-——--—-——-—-——---—--———--—-—-—--—--—--———\n”);
printf("每页显示10条学生记录,按回车键向后翻页.。
.\n”);
getchar();
system(”cls");
printf(”\n********************学生清单************************\n");
printf(”-—----—-——-————-—--—--—-—-—----—--—----—-———-----—--—--——--—-—--————-—--\n”);
printf("--——-———--———-——-———-——-—--————--——-—————--——-————-——--—-—-—-———-—--———-\n");
//查找记录..。
......。
voidsearch(STUDENTSt[],intn)
chars[20];//保存待查找学号字符串
inti;//保存查找到结点的序号
system(”cls”);
printf(”请输入查找的学号:
\n”);
scanf("%s",s);//输入待查找学号
i=find_no(t,n,s);//调用find_no函数,得到一个整数
if(i>n—1)//如果整数i值大于n—1,说明没找到
printf(”没有学号为%s的学生!
\n”,s);
else
print(t[i]);//找到,调用显示函数显示记录
//删除函数,参数为记录数组和记录条数。
..
intdel(STUDENTSt[],intn)
chars[20];//要删除记录的学号
intch=0;
inti;
printf(”请输入要删除的学生学号:
scanf("%s”,s);//输入学号
i=find_no(t,n,s);//调用find_no函数
if(i==n)
printf(”没有找到学号为%s的学生!
\n",s);
printf(”正在删除中!
for(;i〈n;i++)//从删除位置开始依次前移学生记录
strcpy(t[i]。
name,t[i+1].name);
strcpy(t[i]。
no,t[i+1]。
no);
strcpy(t[i]。
sex,t[i+1].sex);
strcpy(t[i].classes,t[i+1]。
classes);
strcpy(t[i].subject,t[i+1]。
subject);
n-—;//删除后记录数减1
printf(”删除成功!
\n");
returnn;//返回记录数
//插入记录函数,参数为结构体数组和记录数。
intadd(STUDENTSt[],intn)
STUDENTStemp;//新插入记录信息
inti,j;
chars[20];//确定插入在哪个记录之前
printf("请输入要插入的学生记录:
printf(”************************************************\n");
printf("学号姓名性别班号学院专业\n");
printf("——-----—---—-——--—-—-—-————-———----——--———-—-——--———-—-—-—--———-—---——--\n”);
scanf(”%s%s%s%s%s”,temp.no,temp。
name,temp。
sex,temp.classes,temp。
subject);//输入插入信息
printf(”—-——-——-—-—-—-—--—-——--———-—-----——-————-——-—---———-——-—-----———-——-----\n");
if(n〉0)
printf(”请输入插入位置的姓名,将新记录插入在该名字前:
scanf("%s”,s);//输入插入位置的姓名
i=find_name(t,n,s);//调用find_name,确定插入位置
i=0;
for(j=n—1;j>=i;j—-)//从最后一个结点开始向后移动一条
strcpy(t[j+1].no,t[j].no);//当前记录的学号拷贝到后一条
strcpy(t[j+1].name,t[j].name);//当前记录的姓名拷贝到后一条
strcpy(t[j+1].sex,t[j].sex);//当前记录的性别拷贝到后一条
strcpy(t[j+1].classes,t[j]。
classes);//当前记录的班号拷贝到后一条
strcpy(t[j+1].subject,t[j].subject);//当前记录的学院专业拷贝到后一条
no,temp。
no);//将新插入记录的学号拷贝到第i个位置
strcpy(t[i]。
name,temp.name);//将新插入记录的姓名拷贝到第i个位置
strcpy(t[i].sex,temp。
sex);//将新插入记录的性别拷贝到第i个位置
strcpy(t[i].classes,temp.classes);
strcpy(t[i].subject,temp。
subject);//将新插入记录的年龄拷贝到第i个位置
n++;//记录数加1
//保存函数,参数为结构体数组和记录数。
voidsave(STUDENTSt[],intn)
FILE*fp;//指向文件的指针
if((fp=fopen("record。
txt","wb”))==NULL)//打开文件,并判断打开是否正常
printf("无法打开学生记录文件!
\n");//打开失败
exit
(1);//退出
printf(”\n正在保存中\n");
fprintf(fp,”%d”,n);//将记录数写入文件
fprintf(fp,”\r\n");//将换行符号写入文件
for(i=0;i〈n;i++)
fprintf(fp,”%-20s%—30s%-10s%—10s%-10s”,t[i]。
no,t[i]。
sex,t[i]。
classes,t[i]。
subject);
//格式写入记录
fprintf(fp,”\r\n”);//将换行符号写入文件
fclose(fp);//关闭文件
printf("****保存成功***\n");//显示保存成功
//读入函数,参数为结构体数组.。
intload(STUDENTSt[])
inti,n;
if((fp=fopen(”record.txt",”rb”))==NULL)//打开文件
printf(”无法打开学生记录文件!
\n");//打开失败
fscanf(fp,"%d”,&n);//读入记录数
for(i=0;ifscanf(fp,"%20s%30s%10s%10s%10s”,t[i]。no,t[i]。name,t[i]。sex,t[i]。classes,t[i]。subject);//按格式读入记录fclose(fp);//关闭文件printf("已经成功加载学生记录文件到内存!\n”);//显示保存成功returnn;//返回记录数}//按班号显示记录函数。....。。。。。.。。.。。.。。。。。。.。.。.。....voiddisplay(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s”,s);//输入班号getchar();i=find_classes(t,n,s);if(i>n—1)printf("没有班号为%d的班级\n",s);else{printf(”\n********************学生清单************************\n”);printf("学号姓名性别班号学院专业\n");printf(”—-———----—----—---—-————-—--———-—-------—-—-—-——-—---—-————-—----—---——-\n—");for(i=0;i{if(strcmp(s,t[i].classes)==0){printf("%—20s%—20s%—10s%-10s%-10s\n",t[i].no,t[i]。name,t[i].sex,t[i]。classes,t[i]。subject);}}printf("--————--——-—----—-—--—————-—-—-———-—---—--——--————-——----—---——-—-—-————\n—");}}//按班号统计人数。..。。..。voidclasscount(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s",s);//输入班号getchar();i=find_classes(t,n,s);if(i〉n—1)printf(”没有班号为%d的班级\n",s);else{intj=0;for(i=0;i〈n;i++)if(strcmp(s,t[i].classes)==0)j++;printf("该班一共有%d人\n”,j);}}//显示指定的一条记录voidprint(STUDENTStemp){printf(”\n****************************************************\n");printf(”学号姓名性别班号学院专业\n");printf("-—--———--—-———-——--———--—---—-—--—-—-————-———-—--—--—-——---—-------—--—-\n”);printf("%—20s%—20s%-10s%-10s%-10s\n",temp。no,temp.name,temp。sex,temp。classes,temp。subject);printf("--—-————————----—-—-———-—————------—--——--—-—---—-—-—----———---————-----\n”);}//按姓名查找函数,参数为记录数组和记录条数以及姓名s。。..。。.。.。。...。.。。。..。。。。。。.。。。.。..intfind_name(STUDENTSt[],intn,char*s){inti;for(i=0;i{if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记录的下标号,程序提前结束}returni;//返回i值}//按班号查找函数,参数为记录数组和记录条数以及姓名s.。..。.。.。。.。。.。。。。。。.。..。。.。。。...。.intfind_classes(STUDENTSt[],intn,char*s){inti;for(i=0;i〈n;i++)//记录开始,直到最后一条{if(strcmp(s,t[i]。classes)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记
fscanf(fp,"%20s%30s%10s%10s%10s”,t[i]。
no,t[i]。
name,t[i]。
sex,t[i]。
classes,t[i]。
//按格式读入记录
fclose(fp);//关闭文件
printf("已经成功加载学生记录文件到内存!
\n”);//显示保存成功
//按班号显示记录函数。
....
voiddisplay(STUDENTSt[],intn)
chars[20];
printf("请输入班号:
scanf(”%s”,s);//输入班号
i=find_classes(t,n,s);
if(i>n—1)
printf("没有班号为%d的班级\n",s);
printf(”\n********************学生清单************************\n”);
printf(”—-———----—----—---—-————-—--———-—-------—-—-—-——-—---—-————-—----—---——-\n—");
for(i=0;i{if(strcmp(s,t[i].classes)==0){printf("%—20s%—20s%—10s%-10s%-10s\n",t[i].no,t[i]。name,t[i].sex,t[i]。classes,t[i]。subject);}}printf("--————--——-—----—-—--—————-—-—-———-—---—--——--————-——----—---——-—-—-————\n—");}}//按班号统计人数。..。。..。voidclasscount(STUDENTSt[],intn){inti;chars[20];printf("请输入班号:\n”);scanf(”%s",s);//输入班号getchar();i=find_classes(t,n,s);if(i〉n—1)printf(”没有班号为%d的班级\n",s);else{intj=0;for(i=0;i〈n;i++)if(strcmp(s,t[i].classes)==0)j++;printf("该班一共有%d人\n”,j);}}//显示指定的一条记录voidprint(STUDENTStemp){printf(”\n****************************************************\n");printf(”学号姓名性别班号学院专业\n");printf("-—--———--—-———-——--———--—---—-—--—-—-————-———-—--—--—-——---—-------—--—-\n”);printf("%—20s%—20s%-10s%-10s%-10s\n",temp。no,temp.name,temp。sex,temp。classes,temp。subject);printf("--—-————————----—-—-———-—————------—--——--—-—---—-—-—----———---————-----\n”);}//按姓名查找函数,参数为记录数组和记录条数以及姓名s。。..。。.。.。。...。.。。。..。。。。。。.。。。.。..intfind_name(STUDENTSt[],intn,char*s){inti;for(i=0;i{if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记录的下标号,程序提前结束}returni;//返回i值}//按班号查找函数,参数为记录数组和记录条数以及姓名s.。..。.。.。。.。。.。。。。。。.。..。。.。。。...。.intfind_classes(STUDENTSt[],intn,char*s){inti;for(i=0;i〈n;i++)//记录开始,直到最后一条{if(strcmp(s,t[i]。classes)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记
if(strcmp(s,t[i].classes)==0)
printf("%—20s%—20s%—10s%-10s%-10s\n",t[i].no,t[i]。
name,t[i].sex,t[i]。
classes,t[i]。
printf("--————--——-—----—-—--—————-—-—-———-—---—--——--————-——----—---——-—-—-————\n—");
//按班号统计人数。
voidclasscount(STUDENTSt[],intn)
chars[20];
scanf(”%s",s);//输入班号
i=find_classes(t,n,s);
if(i〉n—1)
printf(”没有班号为%d的班级\n",s);
intj=0;
for(i=0;i〈n;i++)
if(strcmp(s,t[i].classes)==0)
j++;
printf("该班一共有%d人\n”,j);
//显示指定的一条记录
voidprint(STUDENTStemp)
printf(”\n****************************************************\n");
printf("-—--———--—-———-——--———--—---—-—--—-—-————-———-—--—--—-——---—-------—--—-\n”);
printf("%—20s%—20s%-10s%-10s%-10s\n",temp。
no,temp.name,temp。
sex,temp。
classes,temp。
printf("--—-————————----—-—-———-—————------—--——--—-—---—-—-—----———---————-----\n”);
//按姓名查找函数,参数为记录数组和记录条数以及姓名s。
intfind_name(STUDENTSt[],intn,char*s)
for(i=0;i{if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记录的下标号,程序提前结束}returni;//返回i值}//按班号查找函数,参数为记录数组和记录条数以及姓名s.。..。.。.。。.。。.。。。。。。.。..。。.。。。...。.intfind_classes(STUDENTSt[],intn,char*s){inti;for(i=0;i〈n;i++)//记录开始,直到最后一条{if(strcmp(s,t[i]。classes)==0)//记录中的姓名和待比较的姓名是否相等returni;//相等,则返回该记
if(strcmp(s,t[i].name)==0)//记录中的姓名和待比较的姓名是否相等
returni;//相等,则返回该记录的下标号,程序提前结束
returni;//返回i值
//按班号查找函数,参数为记录数组和记录条数以及姓名s.。
intfind_classes(STUDENTSt[],intn,char*s)
for(i=0;i〈n;i++)//记录开始,直到最后一条
if(strcmp(s,t[i]。
classes)==0)//记录中的姓名和待比较的姓名是否相等
returni;//相等,则返回该记
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1