1.基于数组的学生信息管理系统
实验内容:
编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩。
实验要求:
(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数Input:从键盘输入一个学生信息。
(3) 定义函数Output:将某个学生信息格式化输出。
(4) 定义函数Save:将某个学生信息存入文件。
(5) 定义函数Fetch:从文件中随机读取某个学生的信息。
(6) 定义函数Max:求所有学生某门课程的最高分和分数最高的学生的姓名。
(7) 定义函数Sort_select:对某个专业的学生,按总平均成绩由低到高进行简单选择排序。
(8) 定义函数Sort_buble:对某个班级的学生,按总平均成绩由高到低进行冒泡排序。
(9) 定义函数Sort_insert:对某个班级的学生,按某门课程成绩由低到高进行直接插入排序。
(10) 定义函数Search:实现班级和成绩的综合查找(如1班,总分240分以上同学)。
程序如下:
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
#include<time.h>
#include<typeinfo>
int length;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];//标题
struct student
{
char grad[10];//学号
char name[10];//姓名
char spec[10];//专业
char stu_class[10];//班级
int score1;
int score2;
int score3;
}stu[30];
int Init()//初始化
{
int i = 0;
FILE *p = fopen("1.txt", "r"); //打开文件
if(p==NULL)
return 0;
fscanf(p,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题
while (!feof(p)) //检测流上的文件结束符,如果文件结束,则返回非0值
{ //将文件中数据读取到结构体数组
fscanf(p,"%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3);
i++;
}
length = i;
fclose(p);
return 1;
}
void Input()//从键盘输入一个学生信息存入文件和结构体数组。
{
printf("请输入学生信息:\n");
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
int i = length;
scanf("%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3);
FILE *p = fopen("1.txt", "a"); //打开文件
fprintf(p,"\n%s %s %s %s %d %d %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
fclose(p);
printf("写入文件成功!\n");
length++;
}
void Output()//输入学号,将对应的学生信息格式化输出。
{
char *grad;
printf("请输入查询的学号:");
scanf("%s",grad);
printf("学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
for(int i=0;i<length;i++)
if(strcmp(stu[i].grad,grad)==0)
printf("%s %s %s %s %d %d %d \n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}
void Save()//将某个学生信息存入一个新的文件。
{
printf("请输入学生信息:\n");
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
int i = length;
scanf("%s%s%s%s%d%d%d",&stu[i].grad,&stu[i].name,&stu[i].spec,&stu[i].stu_class,&stu[i].score1,&stu[i].score2,&stu[i].score3);
FILE *p = fopen("other.txt", "w"); //打开文件
fprintf(p,"%s %s %s %s %s %s %s\n",a,b,c,d,e,f,g);
fprintf(p,"%s %s %s %s %d %d %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
fclose(p);
printf("写入文件成功!\n");
}
void Max()//求所有学生某门课程的最高分及对应的学生的姓名。
{
int i;
int max[3]={0,0,0};
for(i=0;i<length;i++)
if(max[0]<stu[i].score1)
max[0]=stu[i].score1;
printf("课程1最高分:%d分----",max[0]);
for(i=0;i<length;i++)
if(stu[i].score1 == max[0])
printf("%s ",stu[i].name);
printf("\n");
for(i=0;i<length;i++)
if(max[1]<stu[i].score2)
max[1]=stu[i].score2;
printf("课程2最高分:%d分----",max[1]);
for(i=0;i<length;i++)
if(stu[i].score2 == max[1])
printf("%s ",stu[i].name);
printf("\n");
for(i=0;i<length;i++)
if(max[2]<stu[i].score3)
max[2]=stu[i].score3;
printf("课程3最高分:%d分----",max[2],stu[i].name);
for(i=0;i<length;i++)
if(stu[i].score3 == max[2])
printf("%s ",stu[i].name);
printf("\n");
}
void Fetch()//从文件中随机读取某个学生的信息。
{
int i = time(NULL) % length;
printf("第%d名学生\n",i+1);
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
printf("%s %s %s %s %d %d %d \n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}
void Sort_select()//按总平均成绩由低到高进行简单选择排序。
{
struct student tmp;
char str[6];
int i,j,t,n,k;
float avg[length],avg_temp;
printf("请输入专业:\n");
scanf("%s",str);
for(i=0;i<length;i++)
avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3;
//简单选择排序
for(i=0; i<length; i++) //做n-1趟选取
{
k = i;
for(j=i+1;j<=length;j++)
if(avg[j] < avg[k] && strcmp(stu[i].spec,str)==0 && strcmp(stu[j].spec,str)==0)
k = j; //k为最小值
if(i!=k)//交换
{
tmp=stu[k]; avg_temp = avg[k];
stu[k]=stu[i]; avg[k] = avg[i];
stu[i]=tmp; avg[i] = avg_temp;
}
}
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n");
for(i=0;i<length;i++)
if(strcmp(stu[i].spec,str)==0)
printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]);
}
void Sort_buble()//按总平均成绩由高到低进行冒泡排序。
{
struct student tmp;
char str[6];
float avg[length],avg_temp;
int i,j;
printf("请输入班级:\n");
scanf("%s",str);
for(i=0;i<length;i++)
avg[i] = float(stu[i].score1 + stu[i].score2 + stu[i].score3) / 3;
//冒泡排序
for(i=0;i<length;i++)
for(j=0;j<length;j++)
if(avg[i]>avg[j] && strcmp(stu[i].stu_class,str)==0 && strcmp(stu[j].stu_class,str)==0)
{
tmp = stu[i]; avg_temp = avg[i];
stu[i] = stu[j]; avg[i] = avg[j];
stu[j] = tmp; avg[j] = avg_temp;
}
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 平均分\n");
for(i=0;i<length;i++)
if(strcmp(stu[i].stu_class,str)==0)
printf("%5s %-6s %3s %s %3d %3d %3d %-6.2f\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,avg[i]);
}
void Sort_insert()//按课程1成绩由低到高进行直接插入排序。
{
int i,j,len=0;
char str[6];
struct student tmp;
struct student insert[100];
printf("请输入班级:\n");
scanf("%s",str);
for(i=0;i<length;i++)
if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序
{
insert[len] = stu[i];
len++;
}
for(i=1;i<len;i++)//循环从第2个元素开始
{
if(insert[i].score1 < insert[i-1].score1)
{
tmp = insert[i];
for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--)
insert[j+1] = insert[j];
insert[j+1] = tmp;
}
}
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
for(i=0;i<len;i++)
printf("%5s %-6s %3s %s %3d %3d %3d\n",insert[i].grad,insert[i].name,insert[i].spec,insert[i].stu_class,insert[i].score1,insert[i].score2,insert[i].score3);
}
void my_Sort_insert()//按课程1成绩由低到高进行直接插入排序。
{
int i,j=0,len=0,location[50];
char str[6];
struct student tmp;
struct student insert[100];
printf("请输入班级:\n");
scanf("%s",str);
for(i=0;i<length;i++)
if(strcmp(stu[i].stu_class,str)==0) //筛选出某个班上的学生进行插入排序
{
insert[len] = stu[i];
location[j++] = i;//存储位置
len++;
}
for(i=1;i<len;i++)//循环从第2个元素开始
{
if(insert[i].score1 < insert[i-1].score1)
{
tmp = insert[i];
for(j = i-1; j >= 0 && insert[j].score1 > tmp.score1; j--)
insert[j+1] = insert[j];
insert[j+1] = tmp;
}
}
for(i=0;i<len;i++)
stu[location[i]] = insert[i];
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
for(i=0;i<length;i++)
printf("%5s %-6s %3s %s %3d %3d %3d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}
void Search()//查找某班总分在某分数段以上的学生
{
int i,k=0,score;
char str[6];
printf("请输入班级和分数:\n");
scanf("%s%d",str,&score);
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3 总分\n");
for(i=0;i<length;i++)
if(strcmp(stu[i].stu_class,str)==0 && stu[i].score1+stu[i].score2+stu[i].score3 > score)
{
printf("%5s %-6s %3s %s %3d %3d %3d %d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score1+stu[i].score2+stu[i].score3);
k++;
}
printf("%s班总分%d以上的一共有%d人。\n",str,score,k);
}
void Sort_total_score()//Self:全体总分排序
{
struct student tmp;
int i,j;
//根据总分进行从大到小冒泡排序
for(i=0;i<length;i++)
for(j=0;j<length;j++)
if(stu[i].score1+stu[i].score2+stu[i].score3 > stu[j].score1+stu[j].score2+stu[j].score3)
{
tmp = stu[i];
stu[i] = stu[j];
stu[j] = tmp;
}
for(i=0;i<length;i++)
printf("%5s %-6s %3s %s %3d %3d %3d %d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score1+stu[i].score2+stu[i].score3);
}
void Sort_grad()//Self:全体学号排序
{
struct student tmp;
int i,j;
//根据学号进行从大到小冒泡排序
for(i=0;i<length;i++)
for(j=0;j<length;j++)
if(strcmp(stu[i].grad,stu[j].grad) > 0 )
{
tmp=stu[i];
stu[i]=stu[j];
stu[j]=tmp;
}
for(i=0;i<length;i++)
printf("%5s %-6s %3s %s %3d %3d %3d\n",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
}
int main()
{
int i,j,k;
if(Init()==0)
{
printf("文件不存在!");
return 0;
}
printf("菜单\n1.输入学生信息\n2.输出学生信息\n3.写入文件\n4.查找课程最高分\n5.随机读取学生信息\n6.同专业平均分简单选择排序\n7.同班级平均分冒泡排序\n");
printf("8.同班级按课程1分数直接插入排序\n9.综合查找\n10.全体总分排序\n11.全体学号排序\n12.重现菜单\n0.退出\n");
printf("请输入选项:");
scanf("%d",&k);
while(k)
{
switch(k)
{
case 0:
break;
case 1:
Input();
break;
case 2:
Output();
break;
case 3:
Save();
break;
case 4:
Max();
break;
case 5:
Fetch();
break;
case 6:
Sort_select();
break;
case 7:
Sort_buble();
break;
case 8:
Sort_insert();
//my_Sort_insert();
break;
case 9:
Search();
break;
case 10:
Sort_total_score();
break;
case 11:
Sort_grad();
break;
case 12:
printf("菜单\n1.写入文件\n2.输出学生信息\n3.写入新文件\n4.查找课程最高分\n5.随机读取学生信息\n6.同专业平均分简单选择排序\n7.同班级平均分冒泡排序\n");
printf("8.同班级按课程1分数直接插入排序\n9.综合查找\n10.全体总分排序\n11.全体学号排序\n12.重现菜单\n0.退出\n");
break;
default:
printf("输入有误,请重新输入!\n");
}
printf("请输入选项:");
scanf("%d",&k);
}
return 0;
}
void write()
{
int i = length;
FILE *p = fopen("1.txt", "w"); //打开文件
fprintf(p,"%s %s %s %s %s %s %s\n",a,b,c,d,e,f,g);
for(i=0;i<length;i++)
fprintf(p,"%s %s %s %s %d %d %d",stu[i].grad,stu[i].name,stu[i].spec,stu[i].stu_class,stu[i].score1,stu[i].score2,stu[i].score3);
fclose(p);
}
1.txt文本文件内容:
grad name spec class score1 score2 score3
2201 Amy cs 2018-1 98 95 98
2202 Bob cs 2018-2 91 74 59
2203 Cindy cs 2018-2 98 84 79
2204 Dell law 2018-1 86 94 99
2205 Emy law 2018-1 98 86 89
2.基于链表的学生信息管理系统
实验内容:
编写并调试程序,实现学校各专业班级学生信息的管理。定义学生信息的链表结点类型,包括:学号、姓名、班级、专业、3门成绩。
实验要求:
(1) main函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数CreateList:按学号由小到大,建立有序的链表。逆序输入 n 个学生信息(调用n次input),学号大的先输入,建立带头结点的单链表。
(3) 定义函数Output:以指向某个学生结点的指针为参数,将学生信息格式化输出。
(4) 定义函数Save:将某个学生信息存入文件。
(5) 定义函数Fetch:从文件中随机读取某个学生的信息。
(6) 定义函数Search_num:查找指定学号的学生,返回指向该学生结点的指针。
(7) 定义函数InsertList:在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
(8) 定义函数Delete_num:从链表中删除指定学号的学生。
(9) 定义函数Search_major_subject_score:查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
(10) 定义函数Delete_major_subject:从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
程序如下:
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<iomanip>
#include<fstream>
#include<time.h>
int length=0;
using namespace std;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];
//定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩
typedef struct StuNode
{
char grad[10];//学号
char name[10];//姓名
char spec[10];//专业
char stu_class[10];//班级
int score1;//C
int score2;//Java
int score3;//Python
struct StuNode *next;
}student, *StuLink;
void Sort(StuLink &head)//从小到大进行冒泡排序
{
StuLink tmp,pre,p,q;
if (head->next)
{
p = head->next->next;
head->next->next = NULL;
while (p)
{
pre = head; //pre是q的前驱
q = pre->next;
while (q && strcmp(q->grad,p->grad)<0)//从链表第二个结点开始找比当前插入值大的结点
{
pre = pre->next;
q = q->next;
}
tmp = p->next;//将p插入到结点pre和q之间
p->next = q;
pre->next = p;
p = tmp;
}
}
}
student *CreateList()//初始化:创建链表
{
void Output(StuLink &p);
StuLink head = (student*)malloc(sizeof(student));
StuLink p,q;
p = head;
q = head;
char grad[10];//学号
char name[10];//姓名
char spec[10];//专业
char stu_class[10];//班级
int score1;
int score2;
int score3;
FILE *r= fopen("2.txt","r");
if(r==NULL)
{
printf("打开文件失败!");
return NULL;
}
fscanf(r,"%s%s%s%s%s%s%s",&a,&b,&c,&d,&e,&f,&g);//读取标题
while(fscanf(r,"%s%s%s%s%d%d%d",grad,name,spec,stu_class,&score1,&score2,&score3)!=EOF)
{
q = (student*)malloc(sizeof(student));
strcpy(q->grad,grad);
strcpy(q->name,name);
strcpy(q->spec,spec);
strcpy(q->stu_class,stu_class);
q->score1 = score1;
q->score2 = score2;
q->score3 = score3;
p->next = q;
p = q;
length++;
}
p->next = NULL;
Sort(head);
//倒序输出
StuLink k = head,t;
while(k->next)
k = k->next;
printf("倒序输出:\n 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
while(k!=head)
{ //倒序输出
t = head;
while(t->next!=k)
t = t->next;//t为k前驱
Output(k);
k = t;
}
return head;
}
void Output(StuLink &p)//输出信息
{
printf("%5s %-5s %-3s %s %3d %3d %3d\n",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
}
void Print_List(StuLink &head)//打印整个链表
{
StuLink p = head->next;
while(p)
{
Output(p);
p = p->next;
}
}
void Save(StuLink &head)//写入文件。
{
StuLink p = (student*)malloc(sizeof(student)),q = head->next;
char grad[10],name[10],spec[10],stu_class[10];
int score1,score2,score3;
printf("请输入学生信息:\n");
scanf("%s%s%s%s%d%d%d",p->grad,p->name,p->spec,p->stu_class,&p->score1,&p->score2,&p->score3);
FILE *w =fopen("2.txt","a");
if(w==NULL)
{
printf("打开文件失败!\n");
return;
}
else printf("写入成功!\n");
fprintf(w,"\n%s %s %s %s %d %d %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
fclose(w);
//存入链表
p->next = q;
head->next = p;
Sort(head);
}
void Fetch(StuLink &H)//随机读取某个学生的信息。
{
StuLink p = H->next;
int i = time(NULL) % length;
int j = i;
while(j)
{
p = p->next;
j--;
}
printf("第%d名学生\n",i+1);
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
Output(p);
}
student *Search_num(StuLink &H)
{ //查找指定学号的学生,返回指向该学生结点的指针。
char grad[10];
printf("请输入查询信息的学号:");
scanf("%s",grad);
StuLink p = H->next;
while(p)
{
if(strcmp(p->grad,grad)==0)
return p;
p = p->next;
}
return NULL;
}
void InsertList(StuLink &H)
{ //在函数中输入一个学生的信息,将该学生信息插入到链表中的相应位置,并保持此链表按学号的有序性。
StuLink p = H->next, q = H;
StuLink insert = (student*)malloc(sizeof(student));
printf("请输入学生信息:\n");
scanf("%s%s%s%s%d%d%d",insert->grad,insert->name,insert->spec,insert->stu_class,&insert->score1,&insert->score2,&insert->score3);
while(p)
{
if(strcmp(p->grad,insert->grad) > 0 )
{
q->next = insert;//应插入q和p之间
insert->next = p;
break;
}
q = q->next;//q是p的前驱
p = p->next;
}
if(!p)//insert的学号大于所有已知值
{
q->next = insert;
insert->next = NULL;
}
p = H->next;
printf("\n");
Print_List(H);
}
void Delete_num(StuLink &H)//从链表中删除指定学号的学生。
{
StuLink p = H->next, q = H;
char grad[10];
printf("请输入想删除的学生的学号:\n");
scanf("%s",grad);
while(p)
{
if(strcmp(p->grad,grad)==0)
{
q->next = p->next;
free(p);
break;
}
q = q->next;
p = p->next;
}
Print_List(H);
}
student *Search_major_subject_score(StuLink &H)
{ //查找某个专业的、某门课程的成绩小于某个分数的学生,返回指向该学生结点的指针。
char spec[10];
float score;
StuLink p = H->next;
int lesson;
printf("请输入专业、课程序号和门限分数:\n");
scanf("%s%d%f",spec,&lesson,&score);
while(p)
{
if(strcmp(p->spec,spec)==0)
if(lesson==1 && p->score1<score || lesson==2 && p->score2<score || lesson==3 && p->score3<score)
return p;
p = p->next;
}
return NULL;
}
void Delete_major_subject(StuLink &H)
{ //从链表中删除某个专业的、某门课程的成绩小于某个分数的学生。
char spec[10];
float score;
StuLink p = H->next, q = H;
int lesson,flag = 0;
printf("请输入专业、课程序号和门限分数:\n");
scanf("%s%d%f",spec,&lesson,&score);
while(p)
{
if(strcmp(p->spec,spec)==0 && lesson == 1 && p->score1 < score) // cs 1 94
{
Output(p);
q->next = p->next;
free(p);
p = q->next;
flag = 1;
}
else if(strcmp(p->spec,spec)==0 && lesson == 2 && p->score2 < score) // cs 1 94
{
Output(p);
q->next = p->next;
free(p);
p = q->next;
flag = 1;
}
else if(strcmp(p->spec,spec)==0 && lesson == 3 && p->score3 < score) // cs 1 94
{
Output(p);
q->next = p->next;
free(p);
p = q->next;
flag = 1;
}
else
{
q = p;
p = p->next;
}
}
if(flag==0) printf("不存在此学生!\n");
else
{
printf("剩余学生:\n");
p = H->next;
while(p)
{
Output(p);
p = p->next;
}
}
}
void write(StuLink &H)//写入其他文件
{
StuLink p = H->next;
FILE *w = fopen("other.txt","w");
fprintf(w,"%s %s %s %s %s %s %s",a,b,c,d,e,f,g);
while(p)
{
fprintf(w,"\n%s %s %s %s %d %d %d",p->grad,p->name,p->spec,p->stu_class,p->score1,p->score2,p->score3);
p = p->next;
}
fclose(w);
printf("写入成功!");
}
int main()
{
StuLink H = CreateList(),temp;
int k;
printf("菜单\n1.写入文件\n2.随机读取学生信息\n3.查找指定学号的学生\n4.按学号顺序插入节点\n");
printf("5.从链表中删除指定学号的学生\n6.查找某个专业的、某门课程的成绩小于某个分数的学生,返回其指针\n");
printf("7.从链表中删除某个专业的、某门课程的成绩小于某个分数的学生\n8.重现菜单\n9.打印链表\n10.覆盖式写入\n0.退出\n");
printf("请输入选项:");
scanf("%d",&k);
k = int(k);
while(k)
{
k = int(k);
switch(k)
{
case 0:
break;
case 1:
Save(H);
break;
case 2:
Fetch(H);
break;
case 3:
temp = Search_num(H);
if(temp)
{
printf("指针为:%d\n",temp);
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
Output(temp);
}
else
printf("不存在此学生!\n");
break;
case 4:
InsertList(H);
break;
case 5:
Delete_num(H);
break;
case 6:
temp = Search_major_subject_score(H);
if(temp)
{
printf("指针为:%d\n",temp);
printf(" 学号 姓名 专业 班级 成绩1 成绩2 成绩3\n");
Output(temp);
}
else
printf("不存在此学生!\n");
break;
case 7:
Delete_major_subject(H);
break;
case 8:
printf("菜单\n1.写入文件\n2.随机读取学生信息\n3.查找指定学号的学生\n4.按学号顺序插入节点\n");
printf("5.从链表中删除指定学号的学生\n6.查找某个专业的、某门课程的成绩小于某个分数的学生,返回其指针\n");
printf("7.从链表中删除某个专业的、某门课程的成绩小于某个分数的学生\n8.重现菜单\n9.打印链表\n10.覆盖式写入\n0.退出\n");
break;
case 9:
Print_List(H);
break;
case 10:
write(H);
break;
default:
printf("输入有误,请重新输入!\n");
}
printf("请输入选项:");
scanf("%d",&k);
}
return 0;
}
2.txt文本文件内容:
grad name spec class score1 score2 score3
2201 Amy cs 2018-1 98 95 98
2202 Bob cs 2018-2 91 74 59
2203 Cindy cs 2018-2 98 84 79
2204 Dell law 2018-1 86 94 99
2205 Emy law 2018-1 98 86 89