1、学生成绩管理系统#include #include #include#include /引用头文件struct A int num; char name20; int score3; struct A*next;/声明学生成绩结构体变量/*声明学生成绩管理系统各函数*/void Aadd(char filename20);/声明学生成绩管理系统添加功能函数void Adel(char filename20);/声明学生成绩管理系统删除功能函数void Achange(char filename20);/声明学生成绩管理系统修改功能函数void Asearch(char filename20);
2、/声明学生成绩管理系统查找功能函数void Asave(struct A*pt,char filename20);/声明学生成绩管理系统文件保存函数void END();/声明结束函数struct A*Acreate();/声明学生成绩管理系统新建函数struct A*Aread(char filename20);/声明学生成绩管理系统文件输出函数/*定义结束函数*/ void END()printf(#n);printf(# #n);printf(# 谢谢您的使用,欢迎下次使用,再见! #n);printf(# #n);printf(#n);/*定义学生成绩管理系统新建函数*/struct
3、A*Acreate() struct A*p,*q,*head; int a=0;char ch; p=q=(struct A*)malloc(sizeof(struct A); /开辟一个新单元 head=NULL; printf(学号:); scanf(%d,&p-num); /输入第一个学生的学号 printf(姓名:); scanf(%s,p-name); /输入第一个学生的姓名 getchar(); printf(高数成绩:n); scanf(%d,&p-score0); printf(英语成绩:n); scanf(%d,&p-score1); printf(数据结构成绩:n); s
4、canf(%d,&p-score2); printf(是否继续?Y.是 N(其它任意键).否 ); scanf(%c,&ch); getchar(); if(ch=Y) while(ch=Y) a=a+1; if(a=1) head=p; else q-next=p; /使p指向q的下一结点 q=p; p=(struct A*)malloc(sizeof(struct A); /开辟一个新单元 printf(学号:); scanf(%d,&p-num); printf(姓名:); scanf(%s,p-name); getchar(); printf(高数成绩:n); scanf(%d,&p-
5、score0); printf(英语成绩:n); scanf(%d,&p-score1); printf(数据结构成绩:n); scanf(%d,&p-score2); printf(是否继续?Y.是 N(其它任意键).否 ); scanf(%c,&ch); p-next=NULL; q-next=p; else p-next=NULL; head=p; return(head);/*定义学生成绩管理系统函数*/int main() char ch,filename20; while(1) printf(#n); printf(# #n); printf(# 欢迎您使用学生成绩管理系统! #n
6、); printf(# #n); printf(# 欢迎您使用以下功能: #n); printf(# #n); printf(# A.添加 B.删除 #n); printf(# #n); printf(# C.修改 D.查找 #n); printf(# #n); printf(# E.保存 F.退出 #n); printf(# #n); printf(# #n); printf(# #n); printf(#n); printf(请您选择您所需要的功能:); scanf(%c,&ch); getchar(); if(ch!=A&ch!=B&ch!=C&ch!=D&ch!=E&ch!=F) pr
7、intf(对不起,您输入有误,请重试。n); else if(ch=F) END(); return 0; /退出使用 else printf(请您输入所用文件名:); scanf(%s,filename); getchar(); switch(ch) caseA:Aadd(filename);break;/选择学生成绩添加功能 caseB:Adel(filename);break;/选择学生成绩删除功能 caseC:Achange(filename);break;/选择学生成绩修改功能 caseD:Asearch(filename);break;/选择学生成绩查找功能 caseE:Asave
8、(Acreate(),filename);break;/选择学生成绩保存功能 /*定义学生成绩管理系统文件保存函数*/void Asave(struct A*pt,char filename20) FILE *fp; if(fp=fopen(filename,a)=NULL)/新建并打开文件 printf(对不起,无法打开此文件n);/无法打开此文件 exit(0); while(pt!=NULL)/如果存在就输入文件保存 if(fwrite(pt,sizeof(struct A),1,fp)!=1) printf(对不起,文件输入错误n); pt=pt-next;/使pt指向下一个结点 fc
9、lose(fp); /关闭fp所指的文件/*定义学生成绩管理系统添加函数*/void Aadd(char filename20) struct A*pt,*p; pt=Acreate(); FILE *fp; if(fp=fopen(filename,ab)=NULL)/打开文件出错 fp=fopen(filename,wb);/如果原文件不存在,就新建 while(pt!=NULL) /如果存在就输入文件保存 if(fwrite(pt,sizeof(struct A),1,fp)!=1) printf(对不起,文件输入错误n); pt=pt-next; fclose(fp);/关闭文件 p=
10、Aread(filename); free(p); /释放P所指的内存区 Asave(pt,filename);/*定义学生成绩管理系统文件输出函数*/struct A*Aread(char filename20) FILE*fp; /定义一个指向文件的指针变量fp int i; struct A*head,*p,*q; head=NULL; /头指针为空地址 if(fp=fopen(filename,rb)=NULL)/打开文件出错 printf(对不起,无法打开此文件n);/无法打开此文件 exit(0); printf(当前系统学生成绩内容如下:n); p=q=(struct A*)ma
11、lloc(sizeof(struct A);/把p和q分配为与struct A相同字节的存储区 fread(p,sizeof(struct A),1,fp); /从fp指向的文件读入一组数据 for(i=0;!feof(fp);i+) /如果未遇到fp文件的结束标志 printf(学号:%- 20d姓名:%-20s高数成绩:%-10d英语成绩:%-10d数据结构成绩:%-10dn,p-num,p-name,p-score0,p-score1,p-score2); q=p; p=(struct A*)malloc(sizeof(struct A);/开辟相同字节的存储区 fread(p,size
12、of(struct A),1,fp);/从fp指向的文件中再次读入一组数据 q-next=p; /使p指向下一个结点 if(i=0)head=q; /使q的地址成为头指针 i+; q-next=NULL;/使q的下一个结点为空地址 return(head);/*定义学生成绩管理系统删除功能函数*/void Adel(char filename20) char ch,name20; int a; struct A*pt,*p,*q,*head; int i=0,flag=0; /判断是非的标志 do i=0; head=NULL; /头指针为空地址 p=q=(struct A*)malloc(s
13、izeof(struct A); /开辟p和q空间的起始地址 p=Aread(filename); head=p; /p的空间地址为头指针 printf(请您选择:A.按学号操作 B.按姓名操作 C.按高数成绩操作 D.按英语成绩操作 E.按数据结构成绩操作 ); scanf(%c,&ch); /键盘输入选择键 getchar(); switch(ch) caseA: printf(请输入您要删除学生的学号:);/按学号操作 scanf(%d,&a); /输入学生学号 while(p!=NULL) /指针p的地址不为空地址 if(a=p-num) /若指针p指向的学号与a相等 flag=1;
14、/继续循环 if(i=0) head=p-next; /p的下一个结点的地址为头指针 p=head; else q-next=p-next;/使p的下一个结点指向q的下一个结点 free(p);/释放p所指的内存区 p=q-next;/使q的下一个结点指向p else q=p; /指针变量p的地址赋予指针p p=q-next; /使q的下一个结点指向p i+; if(flag=0) printf(对不起,您要查找的内容不存在。n); else Asave(head,filename); /存储此文件 flag=0; /跳出循环 break;/提前终止循环,跳出switch语句 caseB: p
15、rintf(请输入您要删除学生的姓名:);/按姓名操作 scanf(%s,name); getchar(); while(p!=NULL) /指针p的地址不为空地址 if(strcmp(p-name,name)=0) /比较指针p指向的成员姓名与输入姓名 flag=1; if(i=0) head=p-next;/p的下一个结点赋予头指针 p=head;/再将头指针赋予指针变量p else q-next=p-next; /使p的下一个结点指向q的下一个结点 free(p);/释放p所指的内存区 p=q-next; /使q的下一个结点指向p else q=p; p=q-next; /使q的下一个结
16、点指向p i+; if(flag=0) printf(对不起,您要查找的内容不存在。n); else Asave(head,filename); /存储此头文件 flag=0; break; /提前终止循环,跳出switch语句 caseC: printf(请输入您要删除学生的高数成绩:);/按高数成绩操作 scanf(%d,&a); while(p!=NULL) /指针p的地址不为空地址 if(a=p-score0) /若输入成绩a等于p指向的高数成绩 flag=1; if(i=0) head=p-next; /使p下一个结点成为头指针 p=head;/再将头指针赋予指针变量p else q
17、-next=p-next; /使p的下一个结点指向q的下一个结点 free(p); /释放p所指的内存区 p=q-next; /使q的下一个结点指向p else q=p; p=q-next; /使q的下一个结点指向p i+; if(flag=0) printf(对不起,您要查找的内容不存在。n); else Asave(head,filename); /存储此文件 flag=0; break; /提前终止循环,跳出switch语句 caseD: printf(请输入您要删除学生的英语成绩:);/按英语成绩操作 scanf(%d,&a); while(p!=NULL) /当指针p的地址不为空地址
18、时 if(a=p-score1) /若输入成绩a等于p指向的英语成绩 flag=1; if(i=0) head=p-next; /使p指向的下一个结点引为头指针 p=head; /将头指针赋予指针p else q-next=p-next; /使p的下一个结点指向q的下一个结点 free(p); /释放p所指的内存区 p=q-next; /使q的下一个结点指向p else q=p; /指针p的地址赋予指针q p=q-next; /使q的下一个结点指向p i+; if(flag=0) printf(对不起,您要查找的内容不存在。n); else Asave(head,filename); /存储此
19、文件 flag=0; break; /提前终止循环,跳出switch语句 caseE: printf(请输入您要删除学生的数据结构成绩:);/按数据结构成绩操作 scanf(%d,a); while(p!=NULL) /当指针p的地址不为空地址时 if(a=p-score2) /若输入成绩a等于p指向的数据结构成绩 flag=1; if(i=0) head=p-next; /将p的下一个结点引为头指针 p=head;/再将头指针赋予指针变量p else q-next=p-next; /使p的下一个结点指向q的下一个结点 free(p); /释放p所指的内存区 p=q-next; /使q的下一个
20、结点指向p else q=p; /将指针p的地址赋予指针q的地址 p=q-next;/使q的下一个结点指向p i+; if(flag=0) printf(对不起,您要查找的内容不存在。n); else Asave(head,filename); /存储此文件 flag=0; break; /提前终止循环,跳出switch语句 default: /若上面所有条件都不成立,则运行以下程序 printf(对不起,您输入有误。n); printf(是否继续?Y.是 N(其它任意键).否 n); scanf(%c,&ch); getchar(); while(ch=Y); /当选择Y时pt=Aread(
21、filename); /输出文件ptfree(pt); /释放pt所指的存储区/*定义学生成绩管理系统修改功能函数*/void Achange(char filename20) char ch,name20; int a; struct A*pt,*p,*head; int flag; do flag=0; p=(struct A*)malloc(sizeof(struct A); p=Aread(filename); head=p; printf(请您选择:A.按学号操作 B.按姓名操作 C.按高数成绩操作 D.按英语成绩操作 E.按数据结构成绩操作 ); scanf(%c,&ch); ge
22、tchar(); switch(ch) caseA: printf(请输入您要修改学生的学号:);/按学号操作 scanf(%d,&a); getchar(); while(p!=NULL) if(a=p-num) flag=1; printf(学生原始信息:n); printf(学号:%dn,p-num); printf(姓名:%sn,p-name); printf(高数成绩:%dn,p-score0); printf(英语成绩:%dn,p-score1); printf(数据结构成绩:%dn,p-score2); printf(是否修改学号?Y.是 N(其它任意键).否 ); scanf(
23、%c,&ch); getchar(); if(ch=Y) printf(请输入修改后的学号:); scanf(%d,&p-num); getchar(); printf(是否修改姓名?Y.是 N(其它任意键).否 ); scanf(%c,&ch); getchar(); if(ch=Y) printf(请输入修改后的姓名:); scanf(%s,&p-name); getchar(); printf(是否修改高数成绩?Y.是 N(其它任意键).否 ); scanf(%c,&ch); getchar(); if(ch=Y) printf(请输入修改后高数成绩:); scanf(%d,&p-score0); printf(是否修改英语成绩?Y.是 N(其它任意键).否 ); scanf(%c,&ch); getchar(); if(ch=Y) printf(请输入修改后的英语成绩:); scanf(%d,&p-score1); printf