学生档案管理系统c语言[小编推荐]由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“c学生档案管理系统”。
学生档案管理系统内容与要求
【问题描述】
设计一个学生档案管理系统,对学生档案进行管理。每个学生的信息包括:学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、各门课成绩(每门课包括课程名与成绩)。系统要求包含如下功能:
1。创建功能:初始输入每个学生的信息(学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址)并保存。
2。显示功能:显示全部学生的信息(包括各门课的成绩)。
3。输入某课程成绩功能:按学号、成绩输入选修某门课的所有学生的成绩(说明:并不是所有学生都选同一门课,每个学生选的课可不一样)。
4。统计平均成绩功能:计算每个学生的平均成绩。5。查找功能:按姓名或学号查找学生记录,并显示。6。排序功能:按学号或平均成绩进行排序,并显示。7。插入功能:插入一条学生记录。8。删除功能:删除指定学生的记录。
要求提供一个界面来调用各个功能,界面应尽可能清晰美观。【具体要求】
1。系统应以菜单方式工作,举例如下:
程序运行后显示如下主界面:
****************************************
1--------------创建
2--------------显示
3--------------输入成绩
4--------------统计成绩
5--------------查找
6--------------排序
7--------------插入
8--------------删除
9--------------退出
****************************************
通过选择1-9来确定要做哪一个操作。
若选5,则出现如下界面:
****************************************
1----------按学号查询
2----------按姓名查询
**************************************** 2。要求采用顺序存储结构存储学生基本信息,每个学生的信息是一个数据元素,而其中每个学生各门课的成绩用单链表存储结构存储。【实现提示】
顺序表每个数据元素包括学号、姓名、性别、出生年月、是否党员、手机号码、家庭住址、成绩链表的头指针;成绩链表每个结点的数据域包括课程名与成绩。
【测试数据】
自己设计,报告上要求给出各种情况的数据测试结果。【实现说明】
有能力的同学在完成上述功能的基础上,可以充分发挥自己的想象力增加并完善该系统的功能,如采用文件来存储学生信息,增加输出某门课的成绩记录单功能等等。总体设计
一、设计步骤
分析问题,给出数学模型,设计相应的数据结构。
(1)按照课程要求,可以将学生基本信息以顺序存储方式存放在一数组中,而学生基本信息由于有多个项目,可以将单个学生的信息以结构体的方式存储;
(2)输入的成绩可以在每个通过在结构体中加入一链表来实现存储多门课程的目的,为避免每插入一门课程就需要遍历一次链表,此处应以队列的方式来存储课程;
(3)统计成绩计算出成绩之后为方便后续的显示平均成绩及排序须在每个学生的信息中再加入平均成绩一项; 二.功能模块及调用关系说明
(1)创建基本信息:通过fopen()以读的方式打开“basedata.dat”文件,再用fscanf()将文档中的基本信息存储到p1数组中;
(2)显示学生信息:可以通过遍历数组p1来进行输出,若基本信息为空,则提示先创建信息,若学生课程信息未存入则不进行显示,若课程信息已存入,则在遍历数组的基础上再对每个数组元素中的链表进行遍历输出;
(3)输入成绩:先输入课程代号,通过strcmp()字符串比较判断再同(1)打开相应文件并将信息写入一中间变量里,再通过中间变量中写入的学号查找到该学生,并将这条课程信息用EnQueue()存到该学生的课程链表中,若该课程已存在与该学生的课程链表中则不进行重复写入,其中用isExitcNo()判断是否存在该课程;
(4)统计成绩:通过遍历每个学生的课程链表计算并存储每个学生的平均成绩,若未录入基本信息则提示先创建基本信息,若课程链表为空,则提示先输入成绩;
(5)查找:1.按学号查询:建立一个for循环,通过输入的学号找到相应的学生,并输出该学生的信息,2.按姓名查询:建立一个for循坏,通过输入的姓名找到相应学生,并输出该学生的信息,若并未创建基本信息,则提示先创建基本信息;
(6)排序:1.按学号排序:先将学号用canf()转化为int型,再用插入排序法对数组进行排序;
2.按平均成绩排序:利用插入排序法对数组元素中的平均值比较从而对数组进行排序;
若并未创建基本信息,则提示先创建基本信息;(7)插入:
先输入一个学号,用isNo()判断输入的是否为数字,若输入的并不为数字,则提示其重新输入,输入学号后,若该学号已经存在,则提示重新输入;
在学号输入正确无误的前提下,再输入姓名,再输入性别,用isGender()判断输入的是否是性别,若不为性别,则提示重新输入,再输入出生日期,用isNo判断是否为数字,若不为数字则提示重新输入,再输入是否为党员用isYN()判断格式是否正确,若格式错误则提示重新输入,再输入手机号码,并用isNo()判断是否为数字,若不为数字则提示重新输入,最后再输入地址; 学生基本信息输入完成后再输入课程信息,课程信息记录到数组元素的课程链表中;
输入完成后再用InsertFile()将学生信息写回到学生基本信息文档及课程文档中;
(8)删除:
若学生信息为空,则提示先创建学生信息,学生信息不为空,则输入学号,再通过输入的学号查找到相应的学生并删除数组中该条学生信息,若无法找到该学号则提示无该学生,要求其重新输入;
删除成绩后再用reWFile()将数组中的信息重新写回到学生基本信息文档及课程文档中;
(9)退出程序。详细设计 1)实现概要设计中定义数据的存储结构 struct student{ char No[10];
char name[10];
//学生信息 //学生学号 //学生姓名
char gender[5];//学生性别
char brithday[8];//学生生日
char tpartym[5];//是否为党员
char phoneNo[15];//手机号码
char addr[20];
//学生地址
courses *front;//学生课程队列的队首
courses *rear;int average;} struct courses{ char cNo[15];char sNo[10];int degree;
//课程信息 //课程代号 //课程中学生学号 //相应学号学生的成绩 //学生课程队列的队首 //学生所有课程的平均成绩
courses *next;} 2)函数的算法实现
(1)InitQueue(student &Q)函数的实现(初始化队列)
形参为队列名称;在函数中将用new生成新的节点,并将队头和对位指向此节点,再将头节点的指针域置空。
(2)EnQueue(student &Q,courses e)入队函数的实现
形参一个为队列名称,另一个为插入元素;先为入队元素分配节点空间并用指针p指向该节点,再将节点的数据域置为e然后将新节点插入到队尾并修改队尾指针,使队尾指针指向下一个节点。
(3)GetLine(student Q)输出队列函数的实现
形参为队列名称;先设一个中间变量r作为节点指针,当对首与队尾相等时,即队列为空,则提示课程信息为空,当对列不为空时,将r赋值为队首所指向的指针域,在while循环中当r不为空时分别输出课程名称及对应课程的成绩,再将r指向下一个节点,当r为空时即遍历对列完成则结束循环。
(4)CalculateAve(student &Q)计算平均成绩的实现 形参为队列名称,即为单个数组元素;设置一个变量n并置初值为0用于课程数的计数,设一个中间变量r作为节点指针,将r赋值为队首所指向的指针域,在while循环中当r不为空时将每门课程成绩相加,加完所有成绩之后再将总成绩除以课程数并将所得平均成绩赋值给数组元素。
(5)isExitcNo(student Q,char *cNo)判断该课程是否存在于数组元素队列中
设一个flag做为标志值设置初值为0,在for循环中对每个数组元素进行遍历,在循环过程中用strcmp()将该数组元素中已有课程代号与输入课程代号进行比较,若有相等的课程,则将flag值置为1,并直接结束循环,最后返回flag(6)isNo(char *No)判断是否为数字
若字符串全为数字,则函数返回1,若字符串中有一个不为数字,则返回0.(7)isGender(char *gender)判断是否为性别
若字符串判断为“男“或”女“,则函数返回1,反之则返回0.(8)InsertFile(student Q)插入文件
将文件用fopern()以添加的方式打开,用fprintf()将插入的信息写入文件(9)reWFile(student *p1,int i)写回文件
将文件用fopen()以写的方式打开,用fprintf()将删除信息后的数组重新写回到文件中
3)创建基本信息的算法实现
先用fopen()以读方式打开学生基本信息文档,并将返回地址赋值给文件指针型变量fp,若打开文件错误则提示文件打开错误,用feof()判断是否为文件结尾,用fscanf()将文档中读出的信息赋值分别赋值给p1[i]中的各项数据项,用fscanf()!=EOF防止读入文件中的回车空白行,读入信息后用isExistNo()判断该学号是否已经存在,若存在则不读入该行信息,若不重复则用InitQueue()初始化每个数组元素的队列,读完所有信息后提示创建成功并用fclosef()关闭前面打开的基本信息文件; 4)显示学生信息的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“信息为空,请先创建基本信息“,若数据不为空,则利用for循环对每个数组元素的数据信息进行输出,分别输出p1[j].No,p1[j].name,p1[j].gender p1[j].brithday,p1[j].phoneNo,p1[j].tpartym,p1[j].addr,再在每次循环中用GetLine(p1[j])对该学生的各门课程名及成绩进行输出;若还未存储成绩则 不对课程成绩进行输出; 5)输入成绩的算法实现 先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息”,若数据不为空,先定义一个courses类型的中间变量e,并将e的next指针域设置为空,之后输入课程代号,将输入的课程代号存入e.cNo中,在通过strcmp(_)去与已知的课程代号相比较,找到满足条件的课程代号后用fopen()打开对应的课程文件并将文件地址赋值给fp1,打开文件后用fscanf()将文件中的数据赋值给e.sNo,e.degree,赋值完成后通过e.sNo找到对应的数组元素,并用isExitcNo()判断该门课程是否存在于该数组元素的队列中,若不存在则用EnQueue(p1[j],e)将该课程的信息存入数组元素的队列中,若已经存在该门课程的信息,则不将该课程信息存入数组元素的队列中,存入所有成绩完成后用fclose(fp1)关闭相应的文件; 6)统计成绩的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息“,若数据不为空,则通过建立一个for循环,在循环过程中先判断成绩信息是否为空,若成绩信息为空则提示先输入成绩,反之则用CalculateAve(p1[j])计算每个学生所有课程成绩的平均值,并将函数返回值赋值给p1[j].average;7)查找学生信息的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息”,若数据不为空,通过输入一选择值来选择进行学号搜索或按姓名搜索,若该值为1,先输入一个学号存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的学号与r进行比较,若学号相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人”
若选择值为2则先输入一个姓名存储于r中,再通过建立一个for循环来对数组进行遍历(设立一个flag值用于判断是否能找到该条学生信息,flag初值定为0),每次循环将数组元素中的姓名与r进行比较,若相等,则对该学生的信息进行输出,并将flag赋值为1,若结束循环后flag值仍为0,即数组中无该条学生的信息,则提示“查无此人” 8)排序的算法实现
先通过判断数组长度i来判断学生信息数组是否为空,若i为0,即数据为空,则提示“请先创建基本信息“,若数据不为空,则通过输入一选择值来选择进行学号排序或按平均成绩排序,若该值为1,则进行按学号排序,因此处的学号为字符型,故无法直接进行大小比较,因此需用canf()将字符型变量转化为int型变量再进行大小比较,此处以插入法排序对数组进行排序
若选择值为2,则通过比较数组中平均值的大小对数组进行排序,若成绩信息为空则提示先输入成绩,若不为空则以插入法排序对数组进行排序;
总结
1.在一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很 多问题,但通过自己的努力及询问同学的帮助都一一解决了。2.程序是写出来的,不是想出来的。开始阶总是在想,总感觉很困难做不了,但是真正 投入其中之后才发觉其实只要用心,只要有克服一切的勇气和信心就可以把程序做好,错误总是越改越少的。
3.要用愉悦的心情去做,从编程的过程中体会乐趣,兴趣是最好的老师就是这么回事
4.要善于利用编程软件的调试功能调试自己的程序,通过程序的调试我发现并解决了许多问题
5.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一 步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
6.通过实践,我也发现我的很多不足之处,首先是自己平时上机练习太少,知识的积压给编程带来了一定的麻烦。另外我对数据结构的一些标准库函数还不太了解,如开始进入系统后发现操作的界面很乱,如果能够及时的清屏那样就会变的很明了。查阅了相关的资料和问同学后我知道只要在程序中调用库函数system(”cls“)就可以了,知道了这个函数的基本用法;还有对数据结构中经常出现的错误也不了解,通过实践,使我独自处理错误的能力也有了很大的提高。
7.编写程序需要考虑到程序运行的各种状况,这样才能使程序使用的长久,不易出现bug。
附录
[单击此处添加程序源代码] 主程序: #include #include #include #include #define OK 1 #define ERROR 0 typedef int Status;using namespace std;#include”test1.h“ int main(){ student p1[100];FILE *fp;int choice;int i=0;
do{
cout
cout
1--------------创建”
cout
2--------------显示“
cout
3--------------输入成绩”
cout
4--------------统计成绩“
cout
5--------------查找”
cout
6--------------排序“
cout
7--------------插入”
cout
8--------------删除“
cout
9--------------退出”
cout
cin>>choice;
system(“CLS”);
switch(choice){
case 1:{
if(!(fp=fopen(“e:mysbasedata.dat”,“r”))){
cout
exit(0);}
while(!feof(fp))
if((fscanf(fp,“%s %s %s %s %s %s %s”,p1[i].No,p1[i].name,p1[i].gender,p1[i].brithday,p1[i].phoneNo,p1[i].tpartym,p1[i].addr))!=EOF){
if(isExistNo(p1,p1[i].No,i))
continue;
else{
InitQueue(p1[i]);
i++;
p1[i].average=0;
}}
if(i==0)
cout
else
cout
fclose(fp);
break;}
case 2:
if(i==0)
cout
else
for(int j=0;j
cout
p1[j].name
p1[j].gender
p1[j].brithday
p1[j].phoneNo
p1[j].tpartym
p1[j].addr
GetLine(p1[j]);
}
break;
case 3:
if(i==0)
cout
else{
char c[10];
FILE *fp1;
courses e;
e.next=0;
//student Q;
//InitQueue(Q);
cout
do{
//cout
cin>>c;
if(strcmp(c,“c01”)!=0&&strcmp(c,“c02”)!=0&&strcmp(c,“c03”)!=0&&strcmp(c,“c04”)!=0&&strcmp(c, “0”)!= 0){
cout
continue;
}
if(strcmp(c,“c01”)==0){
strcpy(e.cNo,“c01”);
strcpy(e.cname,“原理基础”);
if(!(fp1=fopen(“e:mysc01.txt”,“r”))){
cout
exit(0);
}
else{
while(!feof(fp1))
if((fscanf(fp1,“%s %d”,e.sNo,&e.degree))!=EOF){
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))
EnQueue(p1[j],e);
}
}
fclose(fp1);
}
else if(strcmp(c,“c02”)==0){
strcpy(e.cNo,“c02”);
strcpy(e.cname,“数据结构”);
if(!(fp1=fopen(“e:mysc02.txt”,“r”))){
cout
exit(0);}
else{
while(!feof(fp1))
if((fscanf(fp1,“%s %d”,e.sNo,&e.degree))!=EOF){
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))
EnQueue(p1[j],e);
}
}
fclose(fp1);
}
else if(strcmp(c,“c03”)==0){
strcpy(e.cNo,“c03”);
strcpy(e.cname,“数学建模”);
if(!(fp1=fopen(“e:mysc03.txt”,“r”))){
cout
exit(0);}
else{
while(!feof(fp1))
if((fscanf(fp1,“%s %d”,e.sNo,&e.degree))!=EOF){
for(int j=0;j
if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))
EnQueue(p1[j],e);
}
}
fclose(fp1);
}
else if(strcmp(c,“c04”)==0){
strcpy(e.cNo,“c04”);
strcpy(e.cname,“微观经济”);
if(!(fp1=fopen(“e:mysc04.txt”,“r”))){
cout
exit(0);}
else{
while(!feof(fp1))
if((fscanf(fp1,“%s %d”,e.sNo,&e.degree))!=EOF){
for(int j=0;j
if((strcmp(e.sNo,p1[j].No))==0&&(isExitcNo(p1[j],e.cNo)==0))
EnQueue(p1[j],e);
}
}
fclose(fp1);
}
//else
// cout
}while((strcmp(c,“0”))!=0);}
break;
case 4:
if(i==0)
cout
else{
for(int j=0;j
cout
p1[j].name
if(!(p1[j].front->next))
cout
else{
CalculateAve(p1[j]);
cout
cout
}
}
break;
case 5:
if(i==0)
cout
else{
int a;
do{
system(“CLS”);
cout
cout
cout
cout
cout
cin>>a;
system(“CLS”);
char r[10];
if(a==1)do{
strcpy(r,“1”);
int flag=0;
cout
cin>>r;
for(int j=0;j
if(strcmp(p1[j].No,r)==0){
cout
p1[j].name
p1[j].gender
p1[j].brithday
p1[j].phoneNo
p1[j].tpartym
p1[j].addr
GetLine(p1[j]);
flag=1;}
if(!flag)
cout
}while(strcmp(r,“0”)!=0);
else if(a==2)
do{
strcpy(r,“1”);
int flag=0;
cout
cin>>r;
for(int j=0;j
if(strcmp(p1[j].name,r)==0){
cout
p1[j].name
p1[j].gender
p1[j].brithday
p1[j].phoneNo
p1[j].tpartym
p1[j].addr
GetLine(p1[j]);
flag=1;}
if(!flag)
cout
}while(strcmp(r,“0”)!=0);
else if(a==0)
break;
else{
cout
system(“pause”);}
}while(1);}
break;
case 6:
if(i==0)
cout
else{
int r;
do{
cout
cout
cout
cout
cout
cin>>r;
if(r==1){
for(int k=1;k
{
int a,b;
canf(p1[k].No,“%d”,&a);
student temp=p1[k];//temp标记为未排序第一个元素
int j=k;
元素
canf(p1[j-1].No,“%d”,&b);while(j>=0&&b>a){ p1[j]=p1[j-1];j--;canf(p1[j-1].No,“%d”,&b);} p1[j]=temp;} for(int j=0;j
cout
} } else if(r==2){ for(int k=1;k
int a;
a=p1[k].average;student temp=p1[k];//temp标记为未排序第一个 int j;for(j=k;j>0&&p1[j-1].average>temp.average;j--){ p1[j]=p1[j-1];} p1[j]=temp;} for(int j=0;j
coutnext))
cout
if(p1[j].average==0)
cout
else
cout
cout
}
}
else if(r==0)
break;
else{
cout
system(“pause”);} }while(1);} break;case 7:{
int a=-1;
do{
cout
while(1){
cin >> p1[i].No;
if(isNo(p1[i].No))
break;
else
cout
}
if(isExistNo(p1,p1[i].No,i)){
cout
continue;}
cout
cin >> p1[i].name;
cout
while(1){
cin >> p1[i].gender;
if(isGender(p1[i].gender)==1)
break;
else
cout
}
cout
while(1){
cin >> p1[i].brithday;
if(isNo(p1[i].brithday))
break;
else
cout
}
cout
cin >> p1[i].tpartym;if(isYN(p1[i].tpartym))
break;else
cout
cout
cin >> p1[i].phoneNo;if(isNo(p1[i].phoneNo))
break;else
cout
cout > p1[i].addr;InitQueue(p1[i]);p1[i].average=0;
//if(!(fp=fopen(“e:mysbasedata.dat”,“a”)))//cout
cout > e.cNo;
//if(isExitcNo(p1[i],e.cNo))
// cout
if(strcmp(e.cNo,“c01”)==0)
strcpy(e.cname,“原理基础”);else if(strcmp(e.cNo,“c02”)==0)
strcpy(e.cname,“数据结构”);else if(strcmp(e.cNo,“c03”)==0)
strcpy(e.cname,“数学建模”);else if(strcmp(e.cNo,“c04”)==0)
strcpy(e.cname,“微观经济”);else if(strcmp(e.cNo, “0”)== 0)
break;else {
cout
continue;}
cout
cin >> e.degree;
if(exiscNoreaign(p1[i],e.cNo,e.degree)==0)
EnQueue(p1[i], e);
//}
}
InsertFile(p1[i]);
cout
cout
cin >> a;
i++;
} while(a!=0);}
break;case 8:{ int a=-1;do{ int flag=0;if(i==0){
cout
a=0;
} else{
char c[10];
student temp;
cout
cin>>c;
for(int j=0;j
{
if(strcmp(p1[j].No,c)==0)
{
i--;
for(int k=j;k
p1[k]=p1[k+1];
flag=1;
break;
}
}
if(flag==0)
cout
else
reWFile(p1,i);
cout
cout
cin>>a;
}
}while(a!=0);}
break;
case 9:break;
defalult:
cout
system(“pause”);
break;} system(“pause”);system(“CLS”);}while(choice!=9);return 0;}
头文件: typedef struct courses{ char cNo[15];char cname[20];char sNo[10];int degree;courses *next;}courses;typedef struct student{ char No[10];char name[10];char gender[5];char brithday[8];char tpartym[5];char phoneNo[15];char addr[20];//courses a;courses *front;courses *rear;int average;}student;/*typedef struct{ courses *front;courses *rear;}LinkQueue;*/ Status InitQueue(student &Q){ Q.front=Q.rear=new courses;Q.front->next=0;return OK;} Status EnQueue(student &Q,courses e){ courses *r;r=new courses;strcpy(r->cNo,e.cNo);strcpy(r->cname,e.cname);r->degree=e.degree;r->next=0;Q.rear->next=r;Q.rear=r;return OK;} Status DeQueue(student &Q,courses &e){ courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;strcpy(e.sNo,r->sNo);e.degree=r->degree;Q.front->next=r->next;if(Q.rear=r)
Q.rear=Q.front;delete r;return OK;} Status GetLine(student Q){ courses *r;if(Q.front==Q.rear)
cout
r=Q.front->next;
while(r){
//strcpy(e.cNo,Q.front->next->cNo);
//e.degree=Q.front->next->degree;
coutcnamedegree
r=r->next;}} coutnext;Q.average=0;while(r){
Q.average+=r->degree;
r=r->next;
n++;} Q.average/=n;return OK;} int isExitcNo(student Q,char *cNo){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){
flag=1;
break;} r=r->next;} return flag;} int isExistNo(student *p1,char *No,int i=0){ int j=0,flag=0;for(j=0;j
if(strcmp(p1[j].No,No)==0)
{
flag=1;
break;
} return flag;} int exiscNoreaign(student &Q,char *cNo,int degree){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){
r->degree=degree;
flag=1;
break;} r=r->next;} return flag;} int isNo(char *No){ int j,flag=1;for(j=0;No[j]!=' ';j++){
if(No[j]'9'){
flag=0;
break;
} } return flag;} int isGender(char *gender){ int flag=0;if((strcmp(gender,“男”)==0)||(strcmp(gender,“女”)==0))
flag=1;return flag;} int isYN(char *YN){ int flag=0;
if((strcmp(YN,“是”)==0)||(strcmp(YN,“否”)==0))
flag=1;return flag;} Status InsertFile(student Q){ FILE *fp1;if(!(fp1 = fopen(“e:mysbasedata.dat”, “a”)))
cout next;while(r){
if(strcmp(r->cNo, “c01”)== 0){
if(!(fp1 = fopen(“e:mysc01.txt”, “a”)))
cout
else
fprintf(fp1, “%s %dn”, Q.No, r->degree);
fclose(fp1);
}
else if(strcmp(r->cNo, “c02”)== 0){
if(!(fp1 = fopen(“e:mysc02.txt”, “a”)))
cout
else
fprintf(fp1, “%s %dn”, Q.No, r->degree);
fclose(fp1);
}
else if(strcmp(r->cNo, “c03”)== 0){
if(!(fp1 = fopen(“e:mysc03.txt”, “a”)))
cout
else
fprintf(fp1, “%s %dn”, Q.No, r->degree);
fclose(fp1);
}
else if(strcmp(r->cNo, “c04”)== 0){
if(!(fp1 = fopen(“e:mysc04.txt”, “a”)))
cout
else
fprintf(fp1, “%s %dn”, Q.No, r->degree);
fclose(fp1);
}
r = r->next;
} return OK;} Status reWFile(student *p1,int i){ FILE *fp,*fp1,*fp2,*fp3,*fp4;if(!(fp = fopen(“e:mysbasedata.dat”, “w”))){
cout
exit(0);} if(!(fp1 = fopen(“e:mysc01.txt”, “w”))){
cout
exit(0);} if(!(fp2 = fopen(“e:mysc02.txt”, “w”))){
cout
exit(0);} if(!(fp3 = fopen(“e:mysc03.txt”, “w”))){
cout
exit(0);} if(!(fp4 = fopen(“e:mysc04.txt”, “w”))){
cout
exit(0);} for(int j=0;jnext;while(r){
if(strcmp(r->cNo, “c01”)== 0)
fprintf(fp1, “%s %dn”, p1[j].No, r->degree);
else if(strcmp(r->cNo, “c02”)== 0)
fprintf(fp2, “%s %dn”, p1[j].No, r->degree);
else if(strcmp(r->cNo, “c03”)== 0)
fprintf(fp3, “%s %dn”, p1[j].No, r->degree);
else if(strcmp(r->cNo, “c04”)== 0)
fprintf(fp4, “%s %dn”, p1[j].No, r->degree);
r = r->next;
} } fclose(fp);fclose(fp1);fclose(fp2);fclose(fp3);fclose(fp4);return OK;}