作者在 2011-07-14 00:37:08 发布以下内容
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
typedef struct student
{
char name[10];
int schoolnumber;
int classnumber;
float score[10];
struct student *next;
} stu,*stupt;
stupt st=NULL;//学生信息的头指针
stupt qt=NULL;//学生信息的尾指针
FILE* fp;//文件指针
//////////////////////////////////////////////////////////////////////////////////////////////////
void Printf_help()
{
printf("╭─────────────────────────────────────╮\n");
printf("│ 请选择操作: │\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("│ a.导出至文件 │\n");
printf("│ 0.退出系统 │\n");
printf("╰─────────────────────────────────────╯\n");
printf(":");
}
//////////////////////////////////////////-1-////////////////////////////////////////////////////////
void inpu(stupt p)
{
int n;
int m=0;
int flag;
while(m<10)//成绩初始化为0
{
p->score[m]=0;
m++;
}
printf("请输入:姓名:");
scanf("%s",p->name);
printf("请输入:学号:");
scanf("%d",&p->schoolnumber);
printf("请输入:班级(如:101):");
scanf("%d",&p->classnumber);
do
{
printf("请输入:第几次作业(1~10):");
scanf("%d",&n);
printf("请输入:该次作业成绩:");
scanf("%f",&p->score[n-1]);
getchar();//清空缓冲区
printf("是否继续输入该生成绩,退出请按q,其他键继续:");
flag=getchar();
}
while(flag!='q');
}
void input(stupt&st,stupt&qt)
{
char flag;
stupt p,q;
p=q=NULL;
printf("确认输入?y.是 n.取消(注意大小写)\n");
while((flag=getchar())!='n')
{
getchar();//清空缓冲区
if(flag=='y')
{
p=(stupt)malloc(sizeof(stu));
if(p==NULL) exit(1);
inpu(p);
getchar();//清空inpu()带来的缓冲区堆积
if(st==NULL) st=qt=p;
else if(qt!=NULL)
{
qt->next=p; //尾指针非空(及链表已存在)接着尾指针建立链表
qt=p;
}
}
else
{
getchar();//清空非法输入带来的回车符
printf("存在非法输入!请进入菜单界面重新选择(按8或9):");
return;
}
printf("是否继续输入?y.是 n.否(注意大小写)\n");
}
if(flag=='n')
{
Printf_help();
}
getchar();//清空缓冲区
if(p!=NULL&&qt!=NULL)
{
qt->next=NULL;
}
}
///////////////////////////////////////////////-2-///////////////////////////////////////////////////
void read(stupt p,FILE* fp)
{
fscanf(fp,"%s",p->name);
fscanf(fp,"%d",&p->classnumber);
fscanf(fp,"%d",&p->schoolnumber);
fscanf(fp,"%f",&p->score[0]);
fscanf(fp,"%f",&p->score[1]);
fscanf(fp,"%f",&p->score[2]);
fscanf(fp,"%f",&p->score[3]);
fscanf(fp,"%f",&p->score[4]);
fscanf(fp,"%f",&p->score[5]);
fscanf(fp,"%f",&p->score[6]);
fscanf(fp,"%f",&p->score[7]);
fscanf(fp,"%f",&p->score[8]);
fscanf(fp,"%f",&p->score[9]);
//fread(p,sizeof(stu),1,fp);
}
/*int judge(FILE * fp)
{
int ch;
ch=fgetc(fp);
fseek(fp,-1l,SEEK_CUR);//回退一个字符位
if(ch==EOF)
return 1;
else
return 0;
}//返回1文件结尾*/
void filep_read_to_st(stupt &st,FILE* fp)
{
//int k;
stupt p;
st=NULL;//置空st,准备从文件中导入学生信息
while(1)
{
//if(judge(fp)) break;
p=(stupt)malloc(sizeof(stu));
read(p,fp);
if(feof(fp)) break;
if(st==NULL) st=qt=p;
else if(qt!=NULL)
{
qt->next=p; //尾指针非空(即链表已存在)接着尾指针建立链表
qt=p;
}
}
if(feof(fp))
{
qt->next=NULL; //如果文件结束,尾指针next指空
}
//k=judge(fp);
//printf("%d",k);
if(st!=NULL&&feof(fp)) printf("文件导入成功!\n");
else printf("导入失败,请重新导入!\n");
}
void readfile(stupt &st,FILE* fp)
{
char flag,flag_1;
char filename[90];
printf("如导入前有过手动输入,请先导出至文件后再进行导入,否则输入那部分数据将丢失!\n");
printf("任意键继续,退出请按q:");
flag_1=getchar();
getchar();
if(flag_1=='q')
{
return;
}
lab_2:
printf("请选择:a.程序默认路径导入(之前导出时需要是默认导出) b.自定义导入路径(请确保导入路径合法):");
flag=getchar();
getchar();
if(flag=='b')
{
printf("请输入导入路径(请确保导入路径合法!)(如c:.\\student_homework_infor.txt):");
scanf("%s",filename);
getchar();
if(access(filename,0)==1)
{
printf("路径不合法或文件不存在,请重新选择!\n");
goto lab_2;
}
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("打开%s文件失败,请返回主菜单重试!\n",filename);
return;
}
else
filep_read_to_st(st,fp);
fclose(fp);
}
else if(flag=='a')
{
fp=fopen("student_homework_infor.txt","r");
if(access("student_homework_infor.txt",0)==1)
{
printf("文件不存在!\n");
}
if(fp==NULL)
{
printf("打开程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!\n");
return;
}
else filep_read_to_st(st,fp);
fclose(fp);
}
else printf("非法输入!程序将返回主菜单...\n");
}
///////////////////////////////////////////////-3-/////////////////////////////////////////////////////////////////////
void printf_score(stupt p)
{
int n=0;
printf("前十次成绩如下:\n");
printf("-----------------------------------------------------------------------------\n");
while(n<10)
{
printf("%f ",p->score[n]);
n++;
}
printf("\n");
}
void search(stupt&st,int snum)
{
stupt p,q;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
printf_score(p); //查找成功输出并返回上级函数
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
printf_score(q); //查找成功输出并返回上级函数
return;
}
q=q->next;//下一个
}
printf("查询失败,该学号学生信息不存在\n");
}
void school_num_search(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要查找的学生学号(如221):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
search(st,snum);
//getchar();//清空scanf结束时进入缓冲的enter符
printf("按任意键继续查找,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////-4-/////////////////////////////////////////////////////////
void printf_infor(stupt p)
{
printf("%-5d%-7s%-5d%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f\n",p->classnumber,p->name,p->schoolnumber,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->score[5],p->score[5],p->score[7],p->score[8],p->score[9]);
printf("──────────────────────────────────────\n");
}
void search_2(stupt st,int clnum)
{
stupt p,q;
int f=0;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入所有学生的信息(请按确认键)\n");
return;
}
else
{
p=st;
q=p->next;
}
printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n");
printf("──────────────────────────────────────\n");
if(p->classnumber==clnum)
{
printf_infor(p);
f++;
}//查找成功输出
while(q!=NULL)
{
if(q->classnumber==clnum)
{
printf_infor(q);
f++;
}//查找成功输出
q=q->next;//下一个
}
if(f==0)
{
printf("没有该班级学生信息\n");
}
}
void class_num_search(stupt st)
{
int clnum;
char flag;
do
{
printf("请输入班级(如101):");
scanf("%d",&clnum);
getchar();//清空scanf结束时进入缓冲的enter符
search_2(st,clnum);
printf("按任意键继续查找,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
////////////////////////////////////////////////-5-/////////////////////////////////////////////////////
void change_name(stupt& p)
{
printf("原姓名为:%s\n",p->name);
printf("请输入新姓名:");
scanf("%s",p->name);
getchar();
}
void change_class(stupt& p)
{
printf("原班级为:%d\n",p->classnumber);
printf("请输入新班级:");
scanf("%d",&p->classnumber);
getchar();
}
void change_score(stupt&p)
{
int n;
char flag;
do
{
printf("请输入:修改作业次数(1~10):");
scanf("%d",&n);
printf("原成绩为:%f\n",p->score[n]);
printf("请输入:该次作业新成绩:");
scanf("%f",&p->score[n]);
getchar();//清空缓冲区
printf("是否继续修改该生成绩,退出请按q,其他键继续");
flag=getchar();
}
while(flag!='q');
getchar();
}
void printf_help_2()
{
printf("╭──────────────────────╮\n");
printf("│ 请选择操作: │\n");
printf("│ 1.修改姓名 │\n");
printf("│ 2.修改班级 │\n");
printf("│ 3.修改成绩 │\n");
printf("│ 0.返回主菜单 │\n");
printf("╰──────────────────────╯\n");
printf(":");
}
void change(stupt&p)
{
char a;
printf_help_2();
while((a=getchar())!='0')
{
getchar();
switch(a)
{
case '1':
{
printf("您选择了:1.修改姓名\n");
change_name(p);
break;
}
case '2':
{
printf("您选择了:2.修改班级\n");
change_class(p);
break;
}
case '3':
{
printf("您选择了:3.修改成绩\n");
change_score(p);
break;
}
default:
{
printf("非法输入,请重新选择!\n");
break;
}
}
printf_help_2();
}
if(a=='0')
{
printf("您选择了:0.返回\n");
}
}
void search_3(stupt&st,int snum)
{
stupt p,q;
int f=0;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
change(p); //查找成功并修改
f++;
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
change(q); //查找成功并修改
f++;
return;
}
q=q->next;//下一个
}
if(f==0)
{
printf("没有该学生信息\n");
}
}
void school_num_change(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要修改学生学号(如101):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
search_3(st,snum);
getchar();//清空scanf结束时进入缓冲的enter符
printf("按任意键继续按学号查找修改信息,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////////-6-/////////////////////////////////////////////////////
void delete_pt(stupt&st,int snum)
{
stupt p,q;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
st=q; //查找成功删除并返回上级函数
free(p);
printf("删除成功!\n");
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
p->next=q->next; //查找成功删除并返回上级函数
free(q);
printf("删除成功!\n");
return;
}
else//下一个
{
p=q;
q=p->next;
}
}
printf("删除失败,该学号学生信息不存在\n");
}
void school_num_delete(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要删除的学生学号(如221):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
delete_pt(st,snum);
printf("按任意键继续删除,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////////-7-////////////////////////////////////////////////////
void printf_help_3()
{
printf("╭──────────────────────╮\n");
printf("│ 请选择操作: │\n");
printf("│ 1.按学号查看学生平均成绩 │\n");
printf("│ 2.按班级查看学生平均成绩 │\n");
printf("│ 3.查看学生平均成绩降序序列 │\n");
printf("│ 0.返回主菜单 │\n");
printf("╰──────────────────────╯\n");
printf(":<
#include <stdlib.h>
#include <io.h>
typedef struct student
{
char name[10];
int schoolnumber;
int classnumber;
float score[10];
struct student *next;
} stu,*stupt;
stupt st=NULL;//学生信息的头指针
stupt qt=NULL;//学生信息的尾指针
FILE* fp;//文件指针
//////////////////////////////////////////////////////////////////////////////////////////////////
void Printf_help()
{
printf("╭─────────────────────────────────────╮\n");
printf("│ 请选择操作: │\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("│ a.导出至文件 │\n");
printf("│ 0.退出系统 │\n");
printf("╰─────────────────────────────────────╯\n");
printf(":");
}
//////////////////////////////////////////-1-////////////////////////////////////////////////////////
void inpu(stupt p)
{
int n;
int m=0;
int flag;
while(m<10)//成绩初始化为0
{
p->score[m]=0;
m++;
}
printf("请输入:姓名:");
scanf("%s",p->name);
printf("请输入:学号:");
scanf("%d",&p->schoolnumber);
printf("请输入:班级(如:101):");
scanf("%d",&p->classnumber);
do
{
printf("请输入:第几次作业(1~10):");
scanf("%d",&n);
printf("请输入:该次作业成绩:");
scanf("%f",&p->score[n-1]);
getchar();//清空缓冲区
printf("是否继续输入该生成绩,退出请按q,其他键继续:");
flag=getchar();
}
while(flag!='q');
}
void input(stupt&st,stupt&qt)
{
char flag;
stupt p,q;
p=q=NULL;
printf("确认输入?y.是 n.取消(注意大小写)\n");
while((flag=getchar())!='n')
{
getchar();//清空缓冲区
if(flag=='y')
{
p=(stupt)malloc(sizeof(stu));
if(p==NULL) exit(1);
inpu(p);
getchar();//清空inpu()带来的缓冲区堆积
if(st==NULL) st=qt=p;
else if(qt!=NULL)
{
qt->next=p; //尾指针非空(及链表已存在)接着尾指针建立链表
qt=p;
}
}
else
{
getchar();//清空非法输入带来的回车符
printf("存在非法输入!请进入菜单界面重新选择(按8或9):");
return;
}
printf("是否继续输入?y.是 n.否(注意大小写)\n");
}
if(flag=='n')
{
Printf_help();
}
getchar();//清空缓冲区
if(p!=NULL&&qt!=NULL)
{
qt->next=NULL;
}
}
///////////////////////////////////////////////-2-///////////////////////////////////////////////////
void read(stupt p,FILE* fp)
{
fscanf(fp,"%s",p->name);
fscanf(fp,"%d",&p->classnumber);
fscanf(fp,"%d",&p->schoolnumber);
fscanf(fp,"%f",&p->score[0]);
fscanf(fp,"%f",&p->score[1]);
fscanf(fp,"%f",&p->score[2]);
fscanf(fp,"%f",&p->score[3]);
fscanf(fp,"%f",&p->score[4]);
fscanf(fp,"%f",&p->score[5]);
fscanf(fp,"%f",&p->score[6]);
fscanf(fp,"%f",&p->score[7]);
fscanf(fp,"%f",&p->score[8]);
fscanf(fp,"%f",&p->score[9]);
//fread(p,sizeof(stu),1,fp);
}
/*int judge(FILE * fp)
{
int ch;
ch=fgetc(fp);
fseek(fp,-1l,SEEK_CUR);//回退一个字符位
if(ch==EOF)
return 1;
else
return 0;
}//返回1文件结尾*/
void filep_read_to_st(stupt &st,FILE* fp)
{
//int k;
stupt p;
st=NULL;//置空st,准备从文件中导入学生信息
while(1)
{
//if(judge(fp)) break;
p=(stupt)malloc(sizeof(stu));
read(p,fp);
if(feof(fp)) break;
if(st==NULL) st=qt=p;
else if(qt!=NULL)
{
qt->next=p; //尾指针非空(即链表已存在)接着尾指针建立链表
qt=p;
}
}
if(feof(fp))
{
qt->next=NULL; //如果文件结束,尾指针next指空
}
//k=judge(fp);
//printf("%d",k);
if(st!=NULL&&feof(fp)) printf("文件导入成功!\n");
else printf("导入失败,请重新导入!\n");
}
void readfile(stupt &st,FILE* fp)
{
char flag,flag_1;
char filename[90];
printf("如导入前有过手动输入,请先导出至文件后再进行导入,否则输入那部分数据将丢失!\n");
printf("任意键继续,退出请按q:");
flag_1=getchar();
getchar();
if(flag_1=='q')
{
return;
}
lab_2:
printf("请选择:a.程序默认路径导入(之前导出时需要是默认导出) b.自定义导入路径(请确保导入路径合法):");
flag=getchar();
getchar();
if(flag=='b')
{
printf("请输入导入路径(请确保导入路径合法!)(如c:.\\student_homework_infor.txt):");
scanf("%s",filename);
getchar();
if(access(filename,0)==1)
{
printf("路径不合法或文件不存在,请重新选择!\n");
goto lab_2;
}
fp=fopen(filename,"r");
if(fp==NULL)
{
printf("打开%s文件失败,请返回主菜单重试!\n",filename);
return;
}
else
filep_read_to_st(st,fp);
fclose(fp);
}
else if(flag=='a')
{
fp=fopen("student_homework_infor.txt","r");
if(access("student_homework_infor.txt",0)==1)
{
printf("文件不存在!\n");
}
if(fp==NULL)
{
printf("打开程序所在目录下的student_homework_infor.txt文件失败,请返回主菜单重试!\n");
return;
}
else filep_read_to_st(st,fp);
fclose(fp);
}
else printf("非法输入!程序将返回主菜单...\n");
}
///////////////////////////////////////////////-3-/////////////////////////////////////////////////////////////////////
void printf_score(stupt p)
{
int n=0;
printf("前十次成绩如下:\n");
printf("-----------------------------------------------------------------------------\n");
while(n<10)
{
printf("%f ",p->score[n]);
n++;
}
printf("\n");
}
void search(stupt&st,int snum)
{
stupt p,q;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
printf_score(p); //查找成功输出并返回上级函数
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
printf_score(q); //查找成功输出并返回上级函数
return;
}
q=q->next;//下一个
}
printf("查询失败,该学号学生信息不存在\n");
}
void school_num_search(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要查找的学生学号(如221):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
search(st,snum);
//getchar();//清空scanf结束时进入缓冲的enter符
printf("按任意键继续查找,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////-4-/////////////////////////////////////////////////////////
void printf_infor(stupt p)
{
printf("%-5d%-7s%-5d%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f%-6.1f\n",p->classnumber,p->name,p->schoolnumber,p->score[0],p->score[1],p->score[2],p->score[3],p->score[4],p->score[5],p->score[5],p->score[7],p->score[8],p->score[9]);
printf("──────────────────────────────────────\n");
}
void search_2(stupt st,int clnum)
{
stupt p,q;
int f=0;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入所有学生的信息(请按确认键)\n");
return;
}
else
{
p=st;
q=p->next;
}
printf("班级 姓名 学号 成绩1 成绩2 成绩3 成绩4 成绩5 成绩6 成绩7 成绩8 成绩9 成绩10\n");
printf("──────────────────────────────────────\n");
if(p->classnumber==clnum)
{
printf_infor(p);
f++;
}//查找成功输出
while(q!=NULL)
{
if(q->classnumber==clnum)
{
printf_infor(q);
f++;
}//查找成功输出
q=q->next;//下一个
}
if(f==0)
{
printf("没有该班级学生信息\n");
}
}
void class_num_search(stupt st)
{
int clnum;
char flag;
do
{
printf("请输入班级(如101):");
scanf("%d",&clnum);
getchar();//清空scanf结束时进入缓冲的enter符
search_2(st,clnum);
printf("按任意键继续查找,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
////////////////////////////////////////////////-5-/////////////////////////////////////////////////////
void change_name(stupt& p)
{
printf("原姓名为:%s\n",p->name);
printf("请输入新姓名:");
scanf("%s",p->name);
getchar();
}
void change_class(stupt& p)
{
printf("原班级为:%d\n",p->classnumber);
printf("请输入新班级:");
scanf("%d",&p->classnumber);
getchar();
}
void change_score(stupt&p)
{
int n;
char flag;
do
{
printf("请输入:修改作业次数(1~10):");
scanf("%d",&n);
printf("原成绩为:%f\n",p->score[n]);
printf("请输入:该次作业新成绩:");
scanf("%f",&p->score[n]);
getchar();//清空缓冲区
printf("是否继续修改该生成绩,退出请按q,其他键继续");
flag=getchar();
}
while(flag!='q');
getchar();
}
void printf_help_2()
{
printf("╭──────────────────────╮\n");
printf("│ 请选择操作: │\n");
printf("│ 1.修改姓名 │\n");
printf("│ 2.修改班级 │\n");
printf("│ 3.修改成绩 │\n");
printf("│ 0.返回主菜单 │\n");
printf("╰──────────────────────╯\n");
printf(":");
}
void change(stupt&p)
{
char a;
printf_help_2();
while((a=getchar())!='0')
{
getchar();
switch(a)
{
case '1':
{
printf("您选择了:1.修改姓名\n");
change_name(p);
break;
}
case '2':
{
printf("您选择了:2.修改班级\n");
change_class(p);
break;
}
case '3':
{
printf("您选择了:3.修改成绩\n");
change_score(p);
break;
}
default:
{
printf("非法输入,请重新选择!\n");
break;
}
}
printf_help_2();
}
if(a=='0')
{
printf("您选择了:0.返回\n");
}
}
void search_3(stupt&st,int snum)
{
stupt p,q;
int f=0;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
change(p); //查找成功并修改
f++;
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
change(q); //查找成功并修改
f++;
return;
}
q=q->next;//下一个
}
if(f==0)
{
printf("没有该学生信息\n");
}
}
void school_num_change(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要修改学生学号(如101):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
search_3(st,snum);
getchar();//清空scanf结束时进入缓冲的enter符
printf("按任意键继续按学号查找修改信息,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////////-6-/////////////////////////////////////////////////////
void delete_pt(stupt&st,int snum)
{
stupt p,q;
if(st==NULL)
{
printf("未建立学生信息表,请返回主菜单输入或导入所有学生的信息\n");
return;
}
else
{
p=st;
q=p->next;
}
if(p->schoolnumber==snum)
{
st=q; //查找成功删除并返回上级函数
free(p);
printf("删除成功!\n");
return;
}
while(q!=NULL)
{
if(q->schoolnumber==snum)
{
p->next=q->next; //查找成功删除并返回上级函数
free(q);
printf("删除成功!\n");
return;
}
else//下一个
{
p=q;
q=p->next;
}
}
printf("删除失败,该学号学生信息不存在\n");
}
void school_num_delete(stupt&st)
{
int snum;
char flag;
do
{
printf("请输入要删除的学生学号(如221):");
scanf("%d",&snum);
getchar();//清空scanf结束时进入缓冲的enter符
delete_pt(st,snum);
printf("按任意键继续删除,退出请按q:");
flag=getchar();
getchar();//清空回车符
}
while(flag!='q');
if(flag=='q')
{
Printf_help();
}
}
/////////////////////////////////////////////////-7-////////////////////////////////////////////////////
void printf_help_3()
{
printf("╭──────────────────────╮\n");
printf("│ 请选择操作: │\n");
printf("│ 1.按学号查看学生平均成绩 │\n");
printf("│ 2.按班级查看学生平均成绩 │\n");
printf("│ 3.查看学生平均成绩降序序列 │\n");
printf("│ 0.返回主菜单 │\n");
printf("╰──────────────────────╯\n");
printf(":<
c语言与数据结果实习作业 | 阅读 1667 次
文章评论,共2条