c语言学生管理系统,请把每行代码解释清楚,谢谢了
基本上不用再注释了,用到都是比较基本的句型,有几处修改了一下
c语言学生信息管理系统代码 c语言学生管理系统常见问题
c语言学生信息管理系统代码 c语言学生管理系统常见问题
#include
struct student
{int num; //学号
char name[20];//姓名
float score; //分数
}yiban[29]; //总人数值为29
int s=0; //s为全局变量,表示总人数
int main()
{int tianjia();
int shanchu();
int chaxun();
int xiugai();
int paixu();
int xuanze;
while(1){
printf("
");
printf("学生信息管理系统
");
printf(" 1.初始化学生信息
");
printf(" 2.删除学生信息
");
printf(" 3.查询学生信息
");
printf(" 4.修改学生信息
");
printf(" 5.退出
");
printf("
");
printf("
");
printf("请输入你的选择
");
scanf("%d",&xuanze);
switch(xuanze)
{case 1:{tianjia();break;}
case 2:{shanchu();break;}
case 3:{chaxun();break;}
case 4:{xiugai();break;}
case 5:{paixu();break;}
}}
return 0;
}int tianjia()
{int i,j;
printf("请输入需要添加的学生个数:
");
scanf("%d",&j);
s+=j; //总人数增加
for(i=0;i {printf("请输入添加的第%d个数据(输入格式为 学号,姓名,成绩): ",i+1); scanf("%d,%s,%f",&yiban[i].num,yiban[i].name,&yiban[i].score);} printf(" "); printf("添加之后的数据为: "); printf("学号—姓名—性别 "); for(i=0;i printf("%d—%s—%f ",yiban[i].num,yiban[i].name,yiban[i].score); return 0; }int shanchu() { int i,a; printf("请问你想删除第几个学生的信息: "); scanf("%d",&i); printf(" "); for(a=i;a yiban[a]=yiban[a+1]; s--; //删除之后总人数减一 printf("删除之后学生的信息为: "); for(a=0;a printf("%2d—%s—%f ",yiban[a].num,yiban[a].name,yiban[a].score); printf(" "); return 0; }int chaxun() {return 0;} int xiugai() {return 0;} int paixu() {return 0;} #include #include #include #include #define N 200 int input(struct Student stu[N]); void se(struct Student stu[N],int n); int load(struct Student stu[N]); void output(struct Student stu[N],int n); int insert(struct Student stu_se[],int n); void sort(struct Student stu_se[],int n); void find(struct Student stu_se[],int n); int delete_stu(struct Student stu_se[],int n); typedef struct Student {char num[20]; char name[20]; char sex; int age; float score[3]; float tolscore; float e; }STU; int main() {int total=0,a; STU stu[N]; printf("☆☆☆☆☆学籍管理系统☆☆☆☆☆\n\n"); do{ printf("\n\n"); printf("1-导入学生信息\n2-加载学生信息\n3-保存学生信息\n4-按学号插入学生\n5-给学生排序\n6-查找学生\n7-删除学生\n8-输出当前\n9-退出\n"); printf("\n"); printf("请按键选择:"); scanf("%d",&a); switch(a) {case 1: total=input(stu); break; case 2: total=load(stu);break; case 3:se(stu,total);break; case 4: total+=insert(stu,total);break; case 5:sort(stu,total);break; case 6:find(stu,total);break; case 7:total-=delete_stu(stu,total);break; case 8:output(stu,total);break; case 9:exit(0);break; default:printf("输入错误,请重新输入!\n");break; }//system("cls"); }while(1); }int input(struct Student stu[]) {int i,j,n; float sum; printf("请输入要导入的学生人数\n"); scanf("%d",&n); printf("请输入学生的学号、姓名、性别、年龄及三门课成绩\n"); for(i=0;i {scanf("%s",stu[i].num); scanf("%s",stu[i].name); scanf(" %c",&stu[i].sex); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc scanf("%d",&stu[i].age); sum=0; for(j=0;j<3;j++) {scanf("%f",&stu[i].score[j]); sum+=stu[i].score[j]; }stu[i].tolscore=sum; stu[i].e=sum/3.0f; }return (n); }void se(struct Student stu[],int n) {FILE fp; int i; char filename[20]; printf("请输入文件名:"); scanf("%s",filename); if(strchr(filename,'.')==NULL) strcat(filename,".dat"); if((fp=fopen(filename,"wb"))==NULL) {printf("Cannot open this file\n"); system("pause"); return; }fwrite(&n,sizeof(int),1,fp); for(i=0;i fwrite(&stu[i],sizeof(struct Student),1,fp); fclose(fp); printf("保存成功!"); system("pause"); return; }int load(struct Student stu_se[]) {FILE fp; int i,n; char filename[20]; printf("请输入要加载的文件名: "); //getchar(); scanf("%s",filename); // gets(filename); if(strchr(filename,'.')==NULL) strcat(filename,".dat"); if((fp=fopen(filename,"rb"))==NULL) {printf("Cannot open this file\n"); system("pause"); return 0; }fread(&n,sizeof(int),1,fp); for(i=0;i fread(&stu_se[i],sizeof(struct Student),1,fp); fclose(fp); system("cls"); printf("文件加载成功!数据如下"); output(stu_se,n); return n; }void output(struct Student stu_se[],int n) {int i,j; // system("cls"); printf("\n学号\t姓名\t性别\t年龄\t成绩一\t成绩二\t成绩三\t总分\t平均分\n"); for(i=0;i {printf("%s\t",stu_se[i].num); printf("%s\t",stu_se[i].name); printf("%c\t",stu_se[i].sex); printf("%d\t",stu_se[i].age); for(j=0;j<3;j++) printf("%g\t",stu_se[i].score[j]); printf("%g\t",stu_se[i].tolscore); printf("%.2f",stu_se[i].e); putchar(10); }system("pause"); return; }int insert(struct Student stu_se[],int n) {int i,j,num=0; float sum=0; struct Student s; char flag; if(n>200) {printf("空间已满,无法插入!\n"); return 0; }// load(stu_se,n-1); do{ printf("\n请依次输入学号、姓名、性别、年龄及三门课成绩\n"); scanf("%s",s.num); scanf("%s",s.name); scanf(" %c",&s.sex); //%c前的空格用于接收上一个字符串后的空格、回车、制表符,etc scanf("%d",&s.age); for(j=0;j<3;j++) scanf("%f",&s.score[j]); sum=0; for(j=0;j<3;j++) sum+=s.score[j]; s.tolscore=sum; s.e=sum/3; num++; for(i=n+num-1;strcmp(stu_se[i-1].num,s.num)>0&&i>0;i--) stu_se[i]=stu_se[i-1]; stu_se[i]=s; printf("插入成功!"); fflush(stdin); do {printf("继续插入?(y/n)"); flag=getch(); }while(flag!='y'&&flag!='n'); }while(flag=='y'); system("pause"); //se(stu_se,n); return num; }void sort(struct Student stu_se[],int n) {int a,i,j; struct Student t; system("cls"); printf("\n1-按序号排序\n2-按成绩排序\n请选择:"); scanf("%d",&a); while(a!=1&&a!=2) {printf("输入有误,请重新输入!\n"); scanf("%d",&a); }//load(stu_se,n); if(a==1) {for(i=0;i for(j=0;j {if(strcmp(stu_se[j].num,stu_se[j+1].num)>0) {t=stu_se[j]; stu_se[j]=stu_se[j+1]; stu_se[j+1]=t; }} }else {for(i=0;i for(j=0;j {if(stu_se[j].e {t=stu_se[j]; stu_se[j]=stu_se[j+1]; stu_se[j+1]=t; }} }// se(stu_se,n); printf("排序成功!\n"); output(stu_se,n); return; }void find(struct Student stu_se[],int n) {char ch; do{ int i,j,w=1; char search[20]; //load(stu_se,n); printf("请输入学生的学号或姓名"); scanf("%s",search); for(i=0;i {if(strcmp(stu_se[i].num,search)==0||strcmp(stu_se[i].name,search)==0) {printf("查找成功,该学生的信息为:\n"); printf("%s\t",stu_se[i].num); printf("%s\t",stu_se[i].name); printf("%c\t",stu_se[i].sex); printf("%d\t",stu_se[i].age); for(j=0;j<3;j++) printf("%g\t",stu_se[i].score[j]); printf("%g\t",stu_se[i].tolscore); printf("%.2f",stu_se[i].e); putchar(10); w=0; break; }} if(w) printf("查找失败\n"); do {printf("\n按Y继续查找,按N返回上级菜单\n"); ch=getch(); }while(ch!='y'&&ch!='n'); if(ch=='n') return; }while(ch=='y'); }int delete_stu(struct Student stu_se[],int n) {int i,w=1; char search[20]; // load(stu_se,n); printf("\n请输入要删除学生的姓名或学号\n"); scanf("%s",search); for(i=0;i if(strcmp(stu_se[i].num,search)==0||strcmp(stu_se[i].name,search)==0) {w=0; break; }if(w) {printf("无此学生!\n"); return 0; }for(;i stu_se[i]=stu_se[i+1]; printf("删除成功!\n"); // se(stu_se,n-1); return 1; }之前随便写的 忘了有没有调试 有问题再私信找我 采纳哦~~ //这是我以前的课程设计, /引用库函数/ #include #include #include /定义结构体数组/ typedef struct {char num[12]; /学号/ char name[20]; /姓名/ char sex[2]; /性别/ int score[3]; /成绩/ float g; /平均分/ int sum; /总成绩/ }Student; Student studentAll[80]; /结构体数组/ int student_number = 0; /总人数/ /菜单函数/ int menu_select() {int check_number; do{ system("cls"); /运行前清屏clear screen,在stdlib.h中/ printf("\t★☆☆☆☆☆☆学生成绩管理系统☆☆☆☆☆☆★\n"); /菜单选择/ printf("\t★| 1. 添加学生信息 |★\n"); printf("\t★| 2. 显示学生信息 |★\n"); printf("\t★| 3. 按学号排序 |★\n"); printf("\t★| 4. 按总成绩排序 |★\n"); printf("\t★| 5. 查找单个学生 |★\n"); printf("\t★| 6. 删除指定学生 |★\n"); printf("\t★| 7. 修改学生信息 |★\n"); printf("\t★| 8. 查看各门课程的成绩情况 |★\n"); printf("\t★| 9. 待定功能 |★\n"); printf("\t★| 0. 保存退出 |★\n"); printf("\t★☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆★\n"); printf("请输入选择(0-9):"); scanf("%d",&check_number); /读入选择/ }while(check_number<0||check_number>9); return(check_number); /返回选择/ }//以下的student都是形式参数,真正的数组是在全局变量里定义的studentAll数组 /输入若干条记录/ void Input(Student student[]) {int i=0,j; char flag,clear[10]; /clear[10]为清除多余的数据所用/ char studentNum[12]; //暂存某学生学号 //判断是否已经存在相同学生的学号 while(flag!='n'&&flag!='N') //判断flag是不是n/N,以此判断是否继续输入学生信息 {printf("请输入学生学号: "); scanf("%s",studentNum); while(strcmp(student[i].num,studentNum)!=0&&i {i++; /查找判断/ }//查找到学生,无法增加学生信息,返回主函数 if(i printf("已有相同学号的学生,请重新输入\n"); //如果没有查找到学生,即可增加学生信息 else { if(i==student_number) {memset(student[i].num, 0, sizeof(student[i].num));//字符串清空 strcpy(student[i].num,studentNum); printf("学生姓名:"); scanf("%s",student[student_number].name); printf("学生性别:"); scanf("%s",student[student_number].sex); printf("c语言成绩:"); scanf("%d",&student[student_number].score[0]); printf("数据结构成绩:"); scanf("%d",&student[student_number].score[1]); printf("数据库成绩:"); scanf("%d",&student[student_number].score[2]); student[student_number].sum=0; for(j=0;j<3;j++) student[student_number].sum+=student[student_number].score[j]; student[student_number].g = (float)student[student_number].sum/3; //printf("%.2f\n",student[student_number].g); gets(clear); //清除多余的输入 printf("此学生信息录入完毕,是否继续?(Y/N)"); scanf("%c",&flag); //输入判断 student_number++;//总人数加1 i=0;} }} }/显示所有记录/ void Display(Student student[]) {int i=0; printf("——————————————————————————————————————\n"); printf("|学号 姓名 性别 C语言成绩 数据结构成绩 数据库成绩 平均成绩 总成绩|\n"); printf("——————————————————————————————————————\n"); while(i!=student_number) {printf("| %s %s %s %d %d %d %f %d\n",student[i].num,student[i].name,student[i].sex,student[i].score[0],student[i].score[1],student[i].score[2],student[i].g,student[i].sum); i=i+1; }} /按学号排序/ void Sort_by_num(Student student[]) {Student student_sort; int i,j; for(i=0;i {for(j=0;j {if(strcmp(student[j].num,student[j+1].num)>0) {student_sort=student[j]; student[j]=student[j+1]; student[j+1]=student_sort; }} }} /按总成绩排序/ void Sort_by_sum(Student student[]) {Student student_sort; int i,j; for(i=0;i {for(j=0;j {if(student[j].sum>student[j+1].sum) {student_sort=student[j]; student[j]=student[j+1]; student[j+1]=student_sort; }} }} /按姓名查找并显示一个记录/ void Query_a_record(Student student[]) {int i,j; char findname[20]; //输入学生的姓名 scanf("%s",findname); for(j=0;j {if(strcmp(student[j].name,findname)==0) {i=j; } /查找判断/ }printf("|学号 姓名 性别 C语言成绩 数据结构成绩 数据库成绩 平均成绩 总成绩|\n"); printf("———————————————————————————————————————\n"); printf("| %s %s %s %d %d %d %f %d\n",student[i].num,student[i].name,student[i].sex,student[i].score[0],student[i].score[1],student[i].score[2],student[i].g,student[i].sum); }/按学号查找,删除一条记录/ void Delete_a_record(Student student[]) {int i,j; char findname[20]; printf("请输入将要删除的学生名字"); //输入学生的姓名 scanf("%s",findname); for(j=0;j {if(strcmp(student[j].name,findname)==0) {i=j; }} /查找判断/ for(;i {student[i]=student[i+1]; }student_number--; }/修改学生信息/ void modifyStudentinformation(Student student[]) {char changenum[20]; int i=0; printf("输入将要修改的学生学号"); scanf("%s",changenum); while(strcmp(student[i].num,changenum)!=0&&i {i++; /查找判断/ }if(i {printf("输入新的学生学号"); scanf("%s",student[i].num); printf("输入新的学生姓名:"); scanf("%s",student[i].name); printf("输入新的学生性别:"); scanf("%s",student[i].sex); printf("输入新的c语言成绩:"); scanf("%d",&student[i].score[0]); printf("输入新的数据结构成绩:"); scanf("%d",&student[i].score[1]); printf("输入新的数据库成绩:"); scanf("%d",&student[i].score[2]); }student[i].sum=student[i].score[0]+student[i].score[1]+student[i].score[2]; student[i].g=(float)student[i].sum/3; }/查看各门课程的成绩情况/ void showClass(Student student[]) {int i; int score[3]={0,0,0}; int erage[3]={0,0,0}; for(i=0;i {score[0]=score[0]+student[i].score[0]; score[1]=score[1]+student[i].score[1]; score[2]=score[2]+student[i].score[2]; }erage[0]=score[0]/student_number; erage[1]=score[1]/student_number; erage[2]=score[2]/student_number; printf("C语言的平均成绩是 %d总成绩是%d\n",erage[0],score[0]); printf("数据结构的平均成绩是%d总成绩是%d\n",erage[1],score[1]); printf("数据库的平均成绩是 %d总成绩是%d\n",erage[2],score[2]); }/从文件中读入数据/ void AddfromText(Student student[]) {int i=0; int number = 0; FILE fp; /定义文件指针/ if((fp=fopen("C:\\xin\\student2.txt","rb"))==NULL) /打开二进制文件,如果不存在则创建/ {fp=fopen("C:\\xin\\student2.txt","wb"); }fscanf(fp,"共有%d条记录\n",&student_number); /读入总记录量/ while(i {fscanf(fp,"%s %s %s %d %d %d %f %d\n",student[i].num,student[i].name,student[i].sex,&student[i].score[0],&student[i].score[1],&student[i].score[2],&student[i].g,&student[i].sum); i++; }fclose(fp); }/将所有记录写入文件/ WritetoText(Student student[]) {int i=0; FILE fp; fp=fopen("C:\\xin\\student2.txt","wb"); fprintf(fp,"共有%d条记录\n",student_number); while(i {fprintf(fp," %s %s %s %d %d %d %f %d\n",student[i].num,student[i].name,student[i].sex,student[i].score[0],student[i].score[1],student[i].score[2],student[i].g,student[i].sum); i++; }fclose(fp); }/主函数/ int main() {AddfromText(studentAll); for(;;) {switch(menu_select()) /选择判断/ {case 1: printf("插入学生信息\n"); /输入若干条记录/ Input(studentAll); break; case 2: printf("显示记录\n"); /显示所有记录/ Display(studentAll); system("pause"); break; case 3: printf("按学号排序\n"); Sort_by_num(studentAll); /按学号排序/ printf("按学号排序成功!\n"); Display(studentAll); system("pause"); break; case 4: printf("按总成绩排序\n"); Sort_by_sum(studentAll); /按总成绩排序/ printf("按总成绩排序成功!\n"); Display(studentAll); system("pause"); break; case 5: printf("查找单个学生\n"); Query_a_record(studentAll); /按姓名查找学生/ system("pause"); break; case 6: printf("删除指定学生\n"); Delete_a_record(studentAll); /按姓名查找,删除一条记录/ system("pause"); break; case 7: printf("修改学生信息\n"); modifyStudentinformation(studentAll); /修改学生信息/ system("pause"); break; case 8: printf("查看各门课程的成绩情况\n"); showClass(studentAll); /查看各门课程的成绩情况/ system("pause"); break; case 9: printf("待定功能\n"); printf("功能描述"); system("pause"); break; case 0: WritetoText(studentAll); printf("已保存,退出系统\n"); /结束程序/ system("pause"); exit(0); }} } #include #include #include void frist_print() {printf("\t\t\n\n"); //欢迎信息 printf("\t\t\t欢迎进入学生成绩系统\n"); }void menu() {printf("\n\t\t\n"); //管理菜单 printf("\t\t==\t1.录入学生成绩\n\t\t+\n"); printf("\t\t==\t2.显示学生成绩\n\t\t+\n"); printf("\t\t==\t3.查询学生成绩\n\t\t+\n"); printf("\t\t==\t4.添加学生成绩\n\t\t+\n"); printf("\t\t==\t5.修改学生成绩\n\t\t+\n"); printf("\t\t==\t6.删除学生成绩\n\t\t+\n"); printf("\t\t==\t7.清空页面\n\t\t+\n"); printf("\t\t==\t8.退出系统\n"); printf("\t\t\n"); printf("please choise 1--8:\t"); putchar(10); }struct MM // 结构体定义变量 {char num[20]; char name[10]; float pay; int many; }mm; void scanf_1() //次输入信息并保存在文件中 {char ch; FILE fp; if((fp=fopen("dd.dat","wb+"))==NULL) {printf("cannot open file\n"); exit(0); }do {printf("请输入成绩的--编号:\t"); getchar(); gets(mm.num); printf("姓名:\t"); gets(mm.name); printf("成绩:\t"); scanf("%f",&mm.pay); printf("学号:\t"); scanf("%d",&mm.many); if(fwrite(&mm,sizeof(struct MM),1,fp)!=1) {printf("file write error\n"); exit(0); }printf("是否继续输入y or n ?\t"); getchar(); ch=getchar(); }while(ch=='y'||ch=='Y'); fclose(fp); }void find() //查询成绩的信息 { int a,b=0; char ch[20]; FILE fp; if((fp=fopen("dd.dat","rb"))==NULL) {printf("cannot open file\n"); exit(0); }printf("请输入要查询的成绩的方式\n\t1.编号 2.姓名:\n\t请选择 1 or 2 \t"); scanf("%d",&a); if(a==1) { getchar(); printf("请输入成绩的编号:\t"); gets(ch); while(fread(&mm,sizeof(struct MM),1,fp)==1) if(strcmp(mm.num,ch)==0) {b++; printf("编号\t姓名\t价格\t\t学号\n"); printf("%s\t%s\t%.3f\t\t%d\n",mm.num,mm.name,mm.pay,mm.many); }if(b==0) printf("对不起!没有找到相关信息:\n"); }else if(a==2) { printf("请输入成绩的姓名:\t"); getchar(); gets(ch); while(fread(&mm,sizeof(struct MM),1,fp)==1) if(strcmp(mm.name,ch)==0) {b++; printf("编号\t姓名\t价格\t\t学号\n"); printf("%s\t%s\t%.3f\t\t%d\n",mm.num,mm.name,mm.pay,mm.many); }if(b==0) printf("input error!\n"); }fclose(fp); }void scanf_2() //第二次输入信息并保存在文件中 {char ch; FILE fp; if((fp=fopen("dd.dat","ab"))==NULL) {printf("cannot open file\n"); exit(0); }do {printf("请输入要添加成绩的--编号:\t"); getchar(); gets(mm.num); printf("姓名:\t"); gets(mm.name); printf("价格:\t"); scanf("%f",&mm.pay); printf("学号:\t"); scanf("%d",&mm.many); if(fwrite(&mm,sizeof(struct MM),1,fp)!=1) {printf("file write error\n"); exit(0); }printf("是否继续输入y or n ?\t"); getchar(); ch=getchar(); }while(ch=='y'||ch=='Y'); fclose(fp); }void print() //输出文档中的信息 {FILE fp; if((fp=fopen("dd.dat","rb"))==NULL) {printf("cannot open file\n"); return ; }printf("编号\t姓名\t价格\t\t学号\n"); while(fread(&mm,sizeof(struct MM),1,fp)==1) printf("%s\t%s\t%.3f\t\t%d\n",mm.num,mm.name,mm.pay,mm.many); fclose(fp); }void change() { //修改信息的函数,定义另一个文件,把要修改的信息放到该文件中 struct XX //然后把其余的信息到该文件中;并把该文件从新命名为原来的名 { //把原来的文件移除; char num[20]; char name[10]; float pay; int many; }xx; FILE fp2; int a,b=0,c=0,n=0; char ch[20],ck; FILE fp; do{ if((fp=fopen("dd.dat","rb"))==NULL) {printf("cannot open file\n"); exit(0); }if((fp2=fopen("temp.dat","wb"))==NULL) {printf("cannot open file\n"); exit(0); }printf("请输入要修改成绩的编号:\t"); scanf("%s",ch); n++; while(fread(&mm,sizeof(struct MM),1,fp)==1) {if((strcmp(mm.num,ch)==0)) {b++; //b的值如果一直没有改变说明,没有找到相关的信息; printf("编号\t姓名\t价格\t\t学号\n"); printf("%s\t%s\t%.3f\t\t%d\n",mm.num,mm.name,mm.pay,mm.many); getchar(); printf("请输入成绩的新编号:\t"); gets(xx.num); printf("请输入成绩的新姓名:\t"); gets(xx.name); printf("请输入成绩的新价格:\t"); scanf("%f",&xx.pay); printf("请输入成绩新学号:\t"); scanf("%d",&xx.many); getchar(); fwrite(&xx,sizeof(struct XX),1,fp2); }if(strcmp(mm.num,ch)!=0) fwrite(&mm,sizeof(struct MM),1,fp2); }if(b==0) {printf("\t没有找到相关信息!\n"); getchar(); }rewind(fp); //如果要继续修改的话,要把标记返回到文件的开头; printf("是否继续修改?enter 'y' or 'n' \t"); ck=getchar(); fclose(fp); fclose(fp2); remove("dd.dat"); rename("temp.dat","dd.dat"); }while(ck=='y'||ck=='Y'); if(b!=0) //如果没有找到相关信息就不能输出 printf("\t修改成功:\n"); }void del() { //删除函数和修改很相似 FILE fp2; int a,b=0,c=0,n=0; char ch[20],ck; FILE fp; do { if((fp=fopen("dd.dat","rb"))==NULL) {printf("cannot open file\n"); exit(0); }if((fp2=fopen("temp.dat","wb"))==NULL) {printf("cannot open file\n"); exit(0); }printf("请输入要删除成绩的编号:\t"); scanf("%s",ch); n++; while(fread(&mm,sizeof(struct MM),1,fp)==1) {if((strcmp(mm.num,ch)==0)) {b++; //b的值如果一直没有改变说明,没有找到相关的信息; printf("编号\t姓名\t价格\t\t学号\n"); printf("%s\t%s\t%.3f\t\t%d\n",mm.num,mm.name,mm.pay,mm.many); }else if(strcmp(mm.num,ch)!=0) fwrite(&mm,sizeof(struct MM),1,fp2); }if(b==0) {printf("\t没有找到相关信息!\n"); getchar(); }rewind(fp); getchar(); getchar(); printf("删除成功!"); getchar(); //如果要继续修改的话,要把标记返回到文件的开头; printf("是否继续删除?enter 'y' or 'n' \t"); ck=getchar(); fclose(fp); fclose(fp2); remove("dd.dat"); rename("temp.dat","dd.dat"); }while(ck=='y'||ck=='Y'); if(b!=0) //如果没有找到相关信息就不能输出 printf("\t保存成功:\n"); }void myexit() {int a; char ch; printf("\t是否确定退出?请选择 y or n: "); getchar(); ch=getchar(); if(ch=='y'||ch=='Y') exit(0); else menu(); }int main() {int a; frist_print(); menu(); while(1) {scanf("%d",&a); if(a==1) scanf_1(); else if(a==2) print(); else if(a==3) find(); else if(a==4) scanf_2(); else if(a==5) change(); else if(a==6) del(); else if(a==7) system("cls"); else if(a==8) myexit(); else printf("输入错误!!!请重新输入:\t"); printf("\t按任意键继续!\n"); getch(); menu(); }getch(); }一个成绩管理系统,注释不是太多,写的不太好,能运行,符合你初级水平。 满意请采纳。 挺好的一个题目啊 但我可不愿意帮人写作业 网上很多类似的,你可以参考下: #include #include char name[30]; float math; float chinese; float english; float erage; }; int MenuChoice(void); int EnterAccount(void); void Enter(struct student fst); void Amend(struct student src); void Delete(struct student next); void Print(struct student out); main() {struct student one[100] = {0}, look = one; int menu, t; while ((menu = MenuChoice()) != 0) if (menu >= 1 && menu <= 4 && (t = EnterAccount())) { look = one + t; switch (menu) { case 1: Enter(look); break; case 2: if (strcmp(look->name, "")) printf("学号:%d\n姓名: %s\n语文成绩: %.1f\n数学成绩:%.1f\n英语成绩: %f\n平均"成绩:%.1f\n", t, look->name, look->chinese, look->math, look->english, look->erage); else printf("对不起,该学号不存在!\n"); break; case 3: Amend(look); break; case 4: Delete(look); break; }} else if (menu == 5) Print(one); else printf("错误的请求!\n"); return 0; }int MenuChoice(void) {int choice; printf("请选择:\n" "1 - 新建学生信息\n" "2 - 查找学生信息\n" "3 - 修改学生信息\n" "4 - 删除学生信息\n" "5 - 打印学生信息\n" "0 - 退出\n"); scanf("%d", &choice); return choice; }int EnterAccount(void) {int ret; printf("请输入学号:\n"); scanf("%d", &ret); if (ret >= 1 && ret <= 100) return ret -1; return 0; }void Enter(struct student fst) {printf("请输入学生姓名、语文成绩、数学成绩、英语成绩和平均成绩\n"); scanf("%s%f%f%f%f", fst->name, &fst->chinese, &fst->math, &fst->english, &fst->erage); }void Amend(struct student src) {int t; printf("请选择:\n" "1 - 修改学生姓名\n" "2 - 修改学生语文成绩\n" "3 - 修改学生数学成绩\n" "4 - 修改学生英语成绩\n" "5 - 修改学生平均成绩\n"); scanf("%d", &t); switch (t) { case 1: printf("请输入学生的新名字\n"); scanf("%s", src->name); break; case 2: printf("请输入学生新的语文成绩\n"); scanf("%f", &src->chinese); break; case 3: printf("请输入学生新的数学成绩\n"); scanf("%f", &src->math); break; case 4: printf("请输入学生新的英语成绩\n"); scanf("%f", &src->english); break; case 5: printf("请输入学生新的平均成绩\n"); scanf("%f", &src->erage); break; }} void Delete(struct student next) {strcpy(next->name, ""); next->math = next->english = next->chinese = next->erage = 0.0; }void Print(struct student out) {struct student up; for (up = out; out < &up[100]; out++) if (strcmp(out->name, "")) printf("学号:%d\n姓名: %s\n语文成绩: %.1f\n数学成绩:%.1f\n英语成绩: %.1f\n平均成绩:%.1f\n", out-up + 1, out->name, out->chinese, out->math, out->english, out->erage); } /好吧,其实你可以上网看看,那么多的,你可以自己修改下/ #include #include #include #include #define NULL 0 #define LEN sizeof(struct student) struct student {char name[20]; long int num; char sex[4]; int age; char address[30]; double tele_num; char aihao[20]; struct student next; };//定义一个结构题 int TOTAL_NUM = 0;//学生总数 struct student head = NULL; void welcome (); //欢迎界面 void mainmenu (); //主界面 void record (); //记录数据 void insert(struct student stu); //插入数据 void display(struct student stu); //显示一个学生的信息 void displayAll (); //显示所有学生的信息 void query_by_num (); //按学号查询学生信息 void readData (); //读取文件里学生的信息 void writeData (); //向文件写入学生信息 void freeAll (); //清空链表内容 void del (); //删除学生信息 void change (); //更改学生信息 void devise (struct student p); //选择更改内容 int main (void) {welcome (); //显示主菜单 mainmenu (); return 0; }//显示欢迎信息 void welcome () {printf ("+----------------------------------------------------+\n"); printf ("| |\n"); printf ("| 欢迎使用网络工程学院信息安全092班学生信息管理系统 |\n"); printf ("| |\n"); printf ("+----------------------------------------------------+\n"); }//系统主菜单 void mainmenu () {int choice; choice = -1; readData (); printf ("\n温馨提示:为保证您的作得到保存,请按正常顺序退出系统^_^\n"); do {printf ("\n\n\n"); printf ("\t\t\t--------------------------------------------\n"); printf ("\t\t\t+ 信息安全092班学生信息管理系统 |\n"); printf ("\t\t\t--------------------------------------------\n"); printf ("\t\t\t+ [1]----录入学生信息 |\n"); printf ("\t\t\t+ [2]----浏览学生信息 |\n"); printf ("\t\t\t+ [3]----查询学生信息 |\n"); printf ("\t\t\t+ [4]----删除学生信息 |\n"); printf ("\t\t\t+ [5]----修改学生信息 |\n"); printf ("\t\t\t+ [0]----退出系统 |\n"); printf ("\t\t\t+··············|\n"); printf ("\t\t\t--------------------------------------------\n"); printf ("请输入您的选择:"); scanf ("%d", &choice); switch (choice) {case 0: writeData (); freeAll (); exit (0); case 1: record (); break; case 2: displayAll (); break; case 3: query_by_num (); break; case 4: del (); break; case 5: change (); break; default: printf ("\n无效选项!"); break; }} while (choice != 0); }//录入学生信息 void record () {struct student p0; p0 = (struct student )malloc(LEN); printf ("请输入学生的姓名:"); scanf ("%s",p0->name); printf ("请输入学生的学号:"); scanf ("%ld",&p0->num); printf ("请输入学生的性别:"); scanf ("%s",p0->sex); printf ("请输入学生的年龄:"); scanf ("%d",&p0->age); printf ("请输入学生的地址:"); scanf ("%s",p0->address); printf ("请输入学生的电话:"); scanf ("%lf",&p0->tele_num); printf ("请输入学生的爱好:"); scanf ("%s",p0->aihao); insert (p0); printf ("该学生的信息为:\n"); printf ("-------------------------------------------------------------------------------\n"); printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n"); display (p0); }void insert (struct student stu) {struct student p0, p1, p2; p1 = head; p0 = stu; if (head == NULL) {head = p0; p0->next = NULL; }else {while ((p0->num > p1->num)&&(p1->next != NULL)) {p2 = p1; p1 = p1->next; }if (p0->num <= p1->num) {if (head == p1) head = p0; else p2->next = p0; p0->next = p1; }else {p1->next = p0; p0->next = NULL; }} TOTAL_NUM++; }void display (struct student p) {printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao); }//浏览学生信息 void displayAll() {struct student p; printf("学生总数:%d\n", TOTAL_NUM); p = head; if (head != NULL) {printf("\n姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n"); printf("-------------------------------------------------------------------------------\n"); do {display(p); p = p->next; }while(p != NULL); }printf ("\n"); }//按学号查询学生信息 void query_by_num () {int num; struct student p1; printf("请输入学生的学号:"); scanf("%ld", &num); if(head==NULL) {printf("无学生记录!\n"); return; }p1 = head; while (num!=p1->num && p1->next!=NULL) p1 = p1->next; if (num == p1->num) {printf ("姓名\t学号\t\t年龄\t性别\t地址\t\t电话\t\t爱好\n"); printf ("-------------------------------------------------------------------------------\n"); display (p1); }else printf ("没有该学生记录,请核对!"); }//写入文件 void writeData () {FILE fp;//文件指针 struct student p; fp = fopen("1.txt", "w"); if (!fp) {printf("文件打开错误!"); return; }fprintf(fp,"%d\n", TOTAL_NUM); for(p = head; p!= NULL; p= p->next) {fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao); }fclose (fp); }void freeAll () {struct student p1, p2; p1 = p2=head; while(p1) {p2=p1->next; free (p1); p1 = p2; }} //读取文件 void readData () {FILE fp;//文件指针 struct student p1, p2; fp = fopen("1.txt", "r"); if (!fp) {printf("文件打开错误!"); return; }fscanf(fp,"%d\n", &TOTAL_NUM); head = p1 = p2 = (struct student )malloc(LEN); fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao); while(!feof(fp)) {p1 = (struct student )malloc(LEN); fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao); p2->next = p1; p2 = p1; }p2->next = NULL; fclose(fp); }//删除学生信息 void del () {struct student p1, p2; long int num; if (head == NULL) {printf("无学生记录!\n"); return; }printf("请输入您要删除的学生的学号:"); scanf("%ld", &num); p1 = head; while (num != p1->num && p1->next != NULL) {p2 = p1; p1 = p1->next; }if(num == p1->num) {if(p1 == head) head = p1->next; else p2->next = p1->next; free(p1); TOTAL_NUM--; }else printf("没有该学生记录,请核对!\n"); }//修改学生信息 void change () {struct student p1, p2; long int num; if (head == NULL) {printf ("无学生记录!\n"); return; }printf ("请输入您要修改的学生的学号:"); scanf ("%ld", &num); p1 = head; while (num != p1->num && p1->next != NULL) {p2 = p1; p1 = p1->next; }if(num == p1->num) devise (p1); else printf("没有该学生记录,请核对!\n"); }void devise (struct student p) {int choice; choice = -1; do {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("| 取消 请按 0 |\n"); printf("+----------------------+\n"); printf("请输入您的选择:"); scanf("%d", &choice); switch (choice) {case 0: return; case 1: printf("请输入新姓名:"); scanf("%s", p->name); break; case 2: printf("请输入新学号:"); scanf("%d", &p->num); break; case 3: printf("请输入新性别:"); scanf("%s", p->sex); break; case 4: printf("请输入新年龄:"); scanf("%s", &p->age); break; case 5: printf("请输入新地址:"); scanf("%s", p->address); break; case 6: printf("请输入新电话:"); scanf("%lf", &p->tele_num); break; case 7: printf("请输入新爱好:"); scanf("%s", p->aihao); break; default: printf("\n无效选项!"); break; }} while(choice != 0); }满意请采纳。 可以输入 输出 查找 排序学生的成绩 #include #include #include #define N50 struct Student {long number; char name[20]; int score; }stu[N],t; struct Student p; int Num=0; void input() {char ch; for(p=stu+Num;p-stu {Num++; printf("请输入第%d个学生的学号:",Num); scanf("%ld",&p->number); printf("请输入第%d个学生的姓名:",Num); scanf("%s",p->name); printf("请输入第%d个学生的成绩:",Num); scanf("%d",&p->score); if(Num {printf("\n已输入%d个学生的信息,是否继续输入(y/n)?",Num); ch=getchar(); scanf("%c",&ch); if(ch=='n') break; }else printf("已输入%d个学生的信息,不能再输入\n",N); }} void output() {char ch; for(p=stu;p-stu {printf("学号\t\t\t姓名\t\t\t成绩\n"); printf("%-24ld%-24s%d\n",p->number,p->name,p->score); }printf("按回车键继续\n"); ch=getchar(); ch=getchar(); }void sort() {char ch; int i,j; for(i=0;i for(j=i+1;j {if(stu[i].score {t=stu[i]; stu[i]=stu[j]; stu[j]=t; }} printf("已排序完毕,是否输出排序后学生信息(y/n)?"); ch=getchar(); if(ch=getchar()=='y') output(); }void search() {char nam[20],ch; int k=0; fflush(stdin); printf("请输入需要查询的学生姓名:"); gets(nam); for(p=stu;p-stu {if(!strcmp(nam,p->name)) {printf("学号\t\t\t姓名\t\t\t成绩\n"); printf("%-24ld%-24s%d\n",p->number,p->name,p->score); k=1; }} if(k==0) printf ("不存在该学生信息\n"); printf("按回车键继续\n"); ch=getchar(); }int menu() {int choice; printf("\t\t学生信息管理系统\n"); printf("\t1.输入学生的成绩\n\t2.输出学生的成绩\n\t3.排序学生的成绩\n\t4.查找学生的成绩\n\t5.退出系统\n"); printf("\n请输入你的选择(1-5):"); scanf("%d",&choice); return choice; }main() {while(1) {switch(menu()) {case 1:input();break; case 2:output();break; case 3:sort();break; case 4:search();break; case 5:exit(0); }} } 代码如下: #include #include #include #include #include typedef struct examinee //考生信息结构 { char examno[20]; //准考证号 char name[10]; //姓名 char sex[4]; //性别 short age; //年龄 char examtype[10]; //报考科目 }ElemType; typedef struct Node //定义链表结点 {ElemType data; //数据域 struct Node next; //指针域 }Node,List,position; List make_empty( List L ); //创建一个带头结点的空表 int is_empty( List L ); //测试链表是否是空表 int is_last( position p, List L ); //测试当前位置是否是表尾 position make_node( position p,int n ); //创建结点并输入考生信息 void put_information( position p ); //是否输出该考生信息 void put_name_information( List L ); //输出姓名为xx的考生信息 int put_pos_information( position p ); //输出该地址考生信息 void link_to_tail( List L, position p ); //将结点连接到表尾 int ciculation_make(); //循环创建考生信息 int judge_put_all(); //是否输出所有考生信息 void put_all(List L); //输出所有考生信息。 position find( List L ); //查找个姓名为xx的元素并返回位置 position find_previous( List L ); //查找个姓名为xx的元素并返回该元素直接前驱的位置 //int judge_delete_val(); //询问是否删除 int delete_val( List L ); //删除指定考生信息并输出其信息 void menu(List L); //菜单函数 List L; //position p; int main( void ) {List L = NULL; //定义头结点指针 position p = NULL; //定义表工作指针 L = make_empty( L ); //创建空表 printf("\t\t\t★★考生报名管理程序★★ \t\t---------------------------------------- "); menu(L); return 0; }//创建一个带头结点的空表 List make_empty( List L) {L = ( List ) malloc (sizeof( Node )); if(NULL == L) {printf("内存分配失败"); exit( 1 ); }L->next = NULL; //printf("空表创建成功。 "); return L; }//创建结点并输入考生信息 position make_node( position p ,int n) {if(n) //n为1是创建结点并输入,n为0是修改 {p = ( position ) malloc ( sizeof ( Node )); p->next = NULL ; }printf("请输入考生准考证号:"); gets(p->data.examno); printf("请输入考生姓名:"); gets(p->data.name); do {printf("请输入考生性别,只能输入“男”或者“女”:"); gets(p->data.sex); }while( 0 != strcmp( p->data.sex, "男" ) && 0 != strcmp( p->data.sex, "女" )); //判断性别是否有误 printf("请输入考生年龄:"); scanf("%hd",&p->data.age); getchar(); //如果把这句删掉,就“无法执行”下面的报考类别 /下面的do while用来判断报考类别是否输入有误/ do {printf("请输入报考类别,只能输入“数学”或“英语”或者“数据结构”:"); gets(p->data.examtype); }while( 0 != strcmp( "英语", p->data.examtype ) && 0 != strcmp( "数学", p->data.examtype ) && 0 != strcmp( "数据结构", p->data.examtype )); if(n) {printf("报名成功 "); }else {printf("修改成功 "); }return p; }//前插法; void link_to_tail( List L, position p) {p->next = L->next; L->next = p; }//查找个姓名为xx的元素并返回位置 position find( List L ) {position p = L->next; char name[10]; printf("请输入你要查找的考生姓名:"); gets(name); while( p != NULL && 0 != strcmp( p->data.name , name)) {p=p->next; }return p; }//测试链表是否是空表 int is_empty( List L ) {return L->next == NULL; }//测试当前位置是否是表尾 int is_last( position p, List L ) {return p->next == NULL; }//输出姓名为xx的考生信息 void put_name_information( List L ) {position p = find(L); if(p!=NULL) {printf("您要查找的考生信息: "); printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s ",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype); }else {printf("没有您要找的学生。 "); }} //循环创建考生信息 int ciculation_make() {int n = 2; do {printf("是否继续创建考生信息?是请输入“1”,不是请输入“0”:"); scanf("%d",&n); getchar(); }while( n != 0 && n != 1); return n; }//是否输出考生信息 void put_information( position p ) {int n=2; do {printf("是否输出该考生信息?是请输入“1”,不是请输入“0”:"); scanf("%d",&n); getchar(); }while( n != 0 && n != 1); if(n) {printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s ",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype); }} //是否输出所有考生信息 int judge_put_all() {int n = 2; do {printf("是否输出所有考生信息?是请输入“1”,不是请输入“0”:"); scanf("%d",&n); getchar(); }while( n != 0 && n != 1); return n; }//输出所有考生信息 void put_all(List L) {if(L->next == NULL) {printf("现无考生报名! "); }else {position p=L->next; while( p != NULL ) {printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s ",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype); p=p->next; }} //getchar(); }//询问是否删除 int judge_delete_val() {int n = 2; do {printf("是否要删除某个?是请输入“1”,不是输入“0”:"); scanf("%d",&n); getchar(); }while( n != 0 && n != 1); return n; }//查找个姓名为xx的元素并返回其直接前驱的位置 position find_previous( List L ) {position q = L; position p = L->next; char name[10]; printf("请输入你要查找的考生姓名:"); gets(name); while( p != NULL && 0 != strcmp( p->data.name , name)) {q=p; p=p->next; }if( p != NULL ) {return q; }else return p; }//删除指定考生信息并输出其信息 int delete_val(List L) {int n=2; position q=NULL; position p=find_previous( L ); //返回考生信息地址 if( NULL == p ) {printf("你要删除的考生不存在 "); return 0; }else {q = p->next; p->next = q->next; printf("删除成功。 删除的考生信息为: "); printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s ",q->data.examno,q->data.name,q->data.sex,q->data.age,q->data.examtype); free(q); return 1; }} //输出该地址考试信息 int put_pos_information( position p ) {if(p != NULL ) {printf("准考证号:%s\t姓名:%s\t性别:%s\t年龄:%hd\t报考科目:%s ",p->data.examno,p->data.name,p->data.sex,p->data.age,p->data.examtype); return 1; }else {printf("没有您要查找的学生。"); return 0; }} //菜单函数 void menu(List L) {printf("\t\t\t a. 考生报名入口 "); printf("\t\t\t b. 查询考生信息 "); printf("\t\t\t c. 修改考生信息 "); printf("\t\t\t d. 删除考生信息 "); printf("\t\t\t e. 全部考生信息 "); printf("\t\t\t f. 程序作者信息 "); printf("\t\t\t g. 退出程序 "); char n='h'; while(n != 'g') {do //确定正确输入 {printf("请通过字母序号选择功能:"); n = getchar(); getchar(); putchar(' '); if( n < 'a' || n > 'g') {printf("错误的字母序号。 "); }} while( n < 'a' || n > 'g' ); switch (n) {case 'a': {printf("请输入报名考生信息: "); position p = make_node( p, 1 ); //创建新结点 link_to_tail( L, p ); //将新结点连接到表上 put_information( p ); //是否输出该考生信息 putchar(' '); }break; case 'b': {put_name_information( L ); putchar(' '); }break; case 'c': {int n=0; position p = NULL; printf("您正在进行修改作。 "); p = find(L); n = put_pos_information( p ); if(n) {make_node( p , 0 ); put_information( p ); //是否输出该考生信息 }putchar(' '); }break; case 'd': {printf("您正在进行删除作。 "); delete_val( L ); putchar(' '); }break; case 'e': {put_all( L ); putchar(' '); }break; case 'f': {printf(" 修改日期 版本号 修改人 修改内容 "); printf(" -------------------------------------------------------- "); printf(" 2018.6.19 v2.0 陈百川 增加主菜单 "); printf(" 2018.6.23 v3.0 陈百川 增加生成文件功能 "); printf(" 该版本号为v2.0 "); putchar(' '); }break; default: break; }} printf(" 感谢本次使用,祝您生活愉快。"); getch();c语言学生信息管理系统代码
C语言编写学生信息管理系统,不要报错的......