c语言学生成绩管理系统

我找到了一个代码!试试看:

c语言学生成绩管理系统

#包含“stdio.h”

#包含" stdlib.h "

#包含" string.h "

int shoud save = 0;/* */

结构学生

{

字符编号[10];/*学生ID */

char name[20];

char sex[4];

国际贸易;

国际贸易;

int egrade

int totle

int ave

char near time[10];/*上次更新时间*/

};

typedef结构节点

{

构造学生数据;

结构节点* next

}节点,*链接;

无效菜单()

{

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);

Printf("\t1注册学生数据\ t \ t \ t \ t2删除学生数据\ n ");

printf(" \ t 3查询学生信息\ t \ t \ t \修改学生信息\ n ");

Printf("\t5保存学生信息\ t \ t \ t \ t退出系统\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

}

void printstart()

{

printf("-\ n ");

}

无效错误()

{

printf(" \ n = = = = = & gt;提示:输入错误!\ n ");

}

void Nofind()

{

printf(" \ n = = = = = & gt;提示:找不到学生!\ n ");

}

Void printc() /*该函数用于输出中文*/

{

Printf("学号\t姓名,性别,英语成绩,数学成绩,C语言成绩,平均分\ n ");

}

Void printe(Node *p)/*该函数用于输出英文*/

{

printf(" %-12s % s \ t % s \ t % d \ t % d \ t % d \ t % d \ t % d \ n ",p-& gt;data.num,p-& gt;data.name,p-& gt;data.sex,p-& gt;data.egrade,p-& gt;data.mgrade,p-& gt;data.cgrade,p-& gt;data.totle,p-& gt;data . ave);

}

Node * locate (link L,char find mess [],char namernum [])/*该函数用于定位链表中符合条件的联系人,并返回指针*/

{

node * r;

If (strcmp (namernum," num") = = 0)/*按学号查询*/

{

r = l-& gt;接下来;

while(r!=空)

{

if(strcmp(r-& gt;data.num,findmess)==0)

return r;

r = r-& gt;接下来;

}

}

Elseif (strcmp (namernum," name") = = 0)/*按名称查询*/

{

r = l-& gt;接下来;

while(r!=空)

{

if(strcmp(r-& gt;data.name,findmess)==0)

return r;

r = r-& gt;接下来;

}

}

返回0;

}

Void Add(Link l) /*添加学生*/

{

节点*p,*r,* s;

字符编号[10];

r = l;

s = l-& gt;接下来;

while(r->;下一个!=空)

r = r-& gt;接下来;/*将指针放在末尾*/

while(1)

{

Printf("请输入你的学号(用' 0 ':)返回上一个菜单);

scanf("%s ",数字);

if(strcmp(num," 0")==0)

打破;

while(s)

{

if(strcmp(s-& gt;data.num,num)= 0)

{

printf(" = = = = = = & gt;提示:学号为“%s”的学生已经存在。请选择“4修改”进行修改!\n ",编号);

printstart();

printc();

印刷品;

printstart();

printf(" \ n ");

返回;

}

s = s-& gt;接下来;

}

p=(节点*)malloc(sizeof(节点));

strcpy(p-& gt;data.num,num);

Printf("请输入您的姓名:");

scanf("%s ",p-& gt;data . name);

getchar();

Printf("请输入您的性别:");

scanf("%s ",p-& gt;data . sex);

getchar();

Printf("请输入你的C语言成绩:");

scanf("%d ",& ampp->;data . cgrade);

getchar();

Printf("请输入你的数学成绩:");

scanf("%d ",& ampp->;data . m grade);

getchar();

Printf("请输入你的英语成绩:");

scanf("%d ",& ampp->;data . e grade);

getchar();

p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;

p->;data . ave = p-& gt;data . totle/3;

/*信息输入已经完成*/

p->;next = NULL

r-& gt;next = p;

r = p;

shoudsave = 1;

}

}

Void Qur(Link l) /*查询学生*/

{

int sel

char find mess[20];

node * p;

如果(!l-& gt;下一个)

{

printf(" \ n = = = = = & gt;提示:没有可查询的信息!\ n ");

返回;

}

printf(" \ n = = = = = & gt;1按学号搜索\ n = = = = > 2按姓名搜索\ n ");

scanf("%d ",& ampsel);

If(sel==1)/*学生ID */

{

Printf("请输入要查找的学号:");

scanf("%s ",find mess);

p=Locate(l,findmess," num ");

如果(p)

{

printf(" \ t \ t \ t \ t \ t findings \ n ");

printstart();

printc();

printe(p);

printstart();

}

其他

nofind();

}

Else if(sel==2) /* name */

{

Printf("请输入要查找的名称:");

scanf("%s ",find mess);

p=Locate(l,findmess," name ");

如果(p)

{

printf(" \ t \ t \ t \ t \ t findings \ n ");

printstart();

printc();

printe(p);

printstart();

}

其他

nofind();

}

其他

错误();

}

Void Del(Link l) /* Delete */

{

int sel

节点*p,* r;

char find mess[20];

如果(!l-& gt;下一个)

{

printf(" \ n = = = = = & gt;提示:没有数据可以删除!\ n ");

返回;

}

printf(" \ n = = = = = & gt;1按学号删除\ n = = = = > 2按姓名删除\ n ");

scanf("%d ",& ampsel);

if(sel==1)

{

Printf("请输入要删除的学号:");

scanf("%s ",find mess);

p=Locate(l,findmess," num ");

如果(p)

{

r = l;

while(r->;下一个!=p)

r = r-& gt;接下来;

r-& gt;next = p-& gt;接下来;

免费(p);

printf(" \ n = = = = = & gt;提示:该学生已被成功删除!\ n ");

shoudsave = 1;

}

其他

nofind();

}

else if(sel==2)

{

Printf("请输入要删除的名称:");

scanf("%s ",find mess);

p=Locate(l,findmess," name ");

如果(p)

{

r = l;

while(r->;下一个!=p)

r = r-& gt;接下来;

r-& gt;next = p-& gt;接下来;

免费(p);

printf(" \ n = = = = = & gt;提示:该学生已被成功删除!\ n ");

shoudsave = 1;

}

其他

nofind();

}

其他

错误();

}

无效修改(链接l)

{

node * p;

char find mess[20];

如果(!l-& gt;下一个)

{

printf(" \ n = = = = = & gt;提示:没有数据可以修改!\ n ");

返回;

}

Printf("请输入要修改的学号:");

scanf("%s ",find mess);

p=Locate(l,findmess," num ");

如果(p)

{

Printf("请输入您的新学号(原来是%s):",p-& gt;data . num);

scanf("%s ",p-& gt;data . num);

Printf("请输入您的新名字(原来是%s):",p-& gt;data . name);

scanf("%s ",p-& gt;data . name);

getchar();

Printf("请输入您的新性别(原来是%s):",p-& gt;data . sex);

scanf("%s ",p-& gt;data . sex);

Printf("请输入您新的C语言分数(原来是%d):",p-& gt;data . cgrade);

scanf("%d ",& ampp->;data . cgrade);

getchar();

Printf("请输入您的新数学分数(原来是%d):",p-& gt;data . m grade);

scanf("%d ",& ampp->;data . m grade);

getchar();

Printf("请输入您的新英语成绩(原来是%d):",p-& gt;data . e grade);

scanf("%d ",& ampp->;data . e grade);

p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;

p->;data . ave = p-& gt;data.totle/3;

printf(" \ n = = = = = & gt;提示:数据已修改成功!\ n ");

shoudsave = 1;

}

其他

nofind();

}

无效显示(链接l)

{

int count = 0;

node * p;

p = l-& gt;接下来;

如果(!p)

{

printf(" \ n = = = = = & gt;提示:没有数据可显示!\ n ");

返回;

}

printf(" \ t \ t \ t \ t显示结果\ n ");

printstart();

printc();

printf(" \ n ");

while(p)

{

printe(p);

p = p-& gt;接下来;

}

printstart();

printf(" \ n ");

}

虚空同济(环线l)

{

节点*pm,*pe,*pc,*pt,* pa/*用于指向得分最高的联系人*/

node * r = l-& gt;接下来;

如果(!r)

{

printf(" \ n = = = = = & gt;提示:没有数据可以统计!\ n ");

返回;

}

pm = PE = PC = pt = pa = r;

while(r!=空)

{

if(r-& gt;data . c grade & gt;= PC->;data.cgrade)

PC = r;

if(r-& gt;data . m grade & gt;= pm->;data.mgrade)

pm = r;

if(r-& gt;data . e grade & gt;= PE-& gt;data.egrade)

PE = r;

if(r-& gt;data.totle & gt= pt-& gt;data.totle)

pt = r;

if(r-& gt;data.ave & gt= pa->;data.ave)

pa = r;

r = r-& gt;接下来;

}

Printf (" -统计结果。

Printf("最高总分:\t%s %d \n ",pt-& gt;data.name,pt-& gt;data . totle);

Printf("最高平均分:\t%s %d \n ",pa-& gt;data.name,pa-& gt;data . ave);

Printf("英语最高:\t%s %d \n ",PE-& gt;data.name,PE-& gt;data . e grade);

Printf("数学最高分:\t%s %d \n ",pm-& gt;data.name,pm-& gt;data . m grade);

printf(" C语言最高:\t%s %d \n ",PC-& gt;data.name,PC-& gt;data . cgrade);

printstart();

}

无效排序(链接l)

{

链接ll;

节点*p,*rr,* s;

ll =(Link)malloc(sizeof(Node));/*用于创建新的链接表*/

ll-& gt;next = NULL

如果(l-& gt;next==NULL)

{

printf(" \ n = = = = = & gt;提示:没有可排序的数据!\ n ");

返回;

}

p = l-& gt;接下来;

while(p)

{

s =(Node *)malloc(sizeof(Node));/*新联系人用于保存信息*/

s-& gt;data = p-& gt;数据;

s-& gt;next = NULL

rr = ll

while(RR->;下一个!= NULL & amp& ampRR-& gt;下一个-& gt;data.totle & gt= p->;data.totle)

RR = RR-& gt;接下来;

if(RR-& gt;next==NULL)

RR-& gt;next = s;

其他

{

s-& gt;next = RR-& gt;接下来;

RR-& gt;next = s;

}

p = p-& gt;接下来;

}

免费(l);

l-& gt;next = ll-& gt;接下来;

printf(" \ n = = = = = & gt;提示:排序已完成!\ n ");

}

无效保存(链接l)

{

FILE * fp

node * p;

int flag=1,count = 0;

fp=fopen("c:\\student "," WB ");

if(fp==NULL)

{

printf(" \ n = = = = = & gt;提示:重新打开文件时出错!\ n ");

退出(1);

}

p = l-& gt;接下来;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p = p-& gt;接下来;

count++;

}

其他

{

flag = 0;

打破;

}

}

if(标志)

{

printf(" \ n = = = = = & gt;提示:文件保存成功。(%d条记录已被保存。)\n”,计数);

shoud save = 0;

}

fclose(FP);

}

void main()

{

链接l;/*链接表*/

FILE * fp/*文件指针*/

int sel

char ch

char jian

int count = 0;

节点*p,* r;

printf(" \ t \ t \ t \ t \ t学生成绩管理系统\n \ t \ t -黄欢(第32期)\ n ");

l=(Node*)malloc(sizeof(Node))。

l-& gt;next = NULL

r = l;

fp=fopen("C:\\student "," Rb ");

if(fp==NULL)

{

printf(" \ n = = = = = & gt;提示:文件尚不存在。您想创建它吗?(是/否)\ n ");

scanf("%c ",& amp简);

if(jian=='y'||jian=='Y ')

fp=fopen("C:\\student "," WB ");

其他

退出(0);

}

printf(" \ n = = = = = & gt;提示:文件已经打开,正在导入记录......\ n ");

而(!feof(fp))

{

p=(节点*)malloc(sizeof(节点));

If (fread (p,sizeof (node),1,FP))/*将文件内容放入联系人*/

{

p->;next = NULL

r-& gt;next = p;

r = p;/*在连接中挂起此联系人*/

count++;

}

}

fclose(FP);/*关闭文件*/

printf(" \ n = = = = = & gt;提示:导入记录后,* * *导入了%d条记录。\n ",计数);

while(1)

{

menu();

Printf("请选择一个操作:");

scanf("%d ",& ampsel);

if(sel==0)

{

if(shoudsave==1)

{ getchar();

printf(" \ n = = = = = & gt;提示:数据已被更改。是否要保存对文件的更改(y/n)?\ n ");

scanf("%c ",& ampch);

if(ch=='y'||ch=='Y ')

保存(l);

}

printf(" \ n = = = = = & gt;提示:您已经退出系统。再见!\ n ");

打破;

}

开关(选择)

{

案例1:添加(l);打破;/*增加学生*/

案例二:德尔(l);打破;/*删除学生*/

案例三:古兰经(左);打破;/*查询学生*/

情况四:修改(l);打破;/*修改学生*/

案例五:保存(l);打破;/*拯救学生*/

案例9: printf ("\ t \ t \ t = = = = = =帮助信息= = = = = = = ");打破;

默认:错误();getchar();打破;

}

}

}

/* */

/*

学生成绩管理计划

编写一个管理程序来统计学生的考试成绩。

假设学生成绩已经以一个学生一条记录的形式存储在档案中。

每个学生的记录包含姓名、学号、各门课程成绩等信息。

该程序具有以下功能:查找每门课程的总分,平均分,根据名称、

根据学号查找其记录并显示,浏览所有学生的成绩并根据总分从高到低显示学生信息。

*/

# include & ltstdio.h & gt

# define n3/*课程数量*/

#定义名称EN 20 /*名称中的最大字符数*/

#define CODELEN 10 /*学生编号的最大字符数*/

#define FNAMELEN 80 /*文件名的最大字符数*/

# definebullen80/*缓冲区中的最大字符数*/

/*课程名称列表*/

char课业[SWN][NAMELEN+1] = { "语文"、"数学"、"英语" };

结构记录

{

char name[name len+1];/*姓名*/

char code[CODELEN+1];/*学生ID */

int marks[SWN];/*各门课程的成绩*/

int total/*总分*/

}斯图;

结构节点

{

char name[name len+1];/*姓名*/

char code[CODELEN+1];/*学生ID */

int marks[SWN];/*各门课程的成绩*/

int total/*总分*/

结构节点* next/*后续表格元素指针*/

} *头;/*链表头指针*/

int total[SWN];/*每门课程的总成绩*/

FILE * stfpt/*文件指针*/

char stuff[fname len];/*文件名*/

/*从指定文件中读取记录*/

int readrecord(FILE *fpt,struct record *rpt)

{

char buf[buf len];

int I;

if(fscanf(fpt," %s ",buf)!=1)

返回0;/*文件结尾*/

strncpy(RPT-& gt;name,buf,name len);

fscanf(fpt," %s ",buf);

strncpy(RPT-& gt;code,buf,CODELEN);

for(I = 0;我& ltSWN;i++)

fscanf(fpt," %d ",& ampRPT->;marks[I]);

for(RPT-& gt;total=0,I = 0;我& ltSWN;i++)

RPT->;total+= RPT-& gt;标记[I];

返回1;

}

/*将记录写入指定文件*/

writerecord(FILE *fpt,struct record *rpt)

{

int I;

fprintf(fpt," %s\n ",RPT-& gt;姓名);

fprintf(fpt," %s\n ",RPT-& gt;码);

for(I = 0;我& ltSWN;i++)

fprintf(fpt," %d\n ",RPT-& gt;marks[I]);

返回;

}

/*显示学生记录*/

displaystu(结构记录*报告)

{

int I;

printf(" \ n名称:%s\n ",RPT-& gt;姓名);

printf("Code : %s\n ",RPT-& gt;码);

printf(" Marks:\ n ");

for(I = 0;我& ltSWN;i++)

printf(" %-15s : %4d\n ",schoolwork[i],RPT-& gt;marks[I]);

printf("总计:%4d\n ",RPT-& gt;合计);

}

/*计算各科总分*/

int totalmark(char *fname)

{

FILE * fp

结构记录;

int count,I;

if((fp=fopen(fname," r))= = NULL)

{

printf("无法打开文件%s.\n ",fname);

返回0;

}

for(I = 0;我& ltSWN;i++)

total[I]= 0;

count = 0;

while(readrecord(fp,& amps)!=0)

{

for(I = 0;我& ltSWN;i++)

total[I]+= s . marks[I];

count++;

}

fclose(FP);

返回计数;/*返回记录的数量*/

}

/*列表显示学生信息*/

void liststu(char *fname)

{

FILE * fp

结构记录;

if((fp=fopen(fname," r))= = NULL)

{

printf("无法打开文件%s.\n ",fname);

返回;

}

while(readrecord(fp,& amps)!=0)

{

display stu(& amp;s);

printf("\n按ENTER键继续...\ n ");

while(getchar()!= ' \ n ');

}

fclose(FP);

返回;

}

/*构造链表*/

结构节点*生成列表(char *fname)

{

FILE * fp

结构记录;

结构节点*p,*u,*v,* h;

int I;

if((fp=fopen(fname," r))= = NULL)

{

printf("无法打开文件%s.\n ",fname);

返回NULL

}

h =空;

p=(结构节点*)malloc(sizeof(结构节点));

while(readrecord(fp,(struct record *)p)!=0)

{

v = h;

而(v & amp& ampp->;总计& lt= v->;总计)

{

u = v;

v = v-& gt;接下来;

}

如果(v==h)

h = p;

其他

u-& gt;next = p;

p->;next = v;

p=(结构节点*)malloc(sizeof(结构节点));

}

免费(p);

fclose(FP);

返回h;

}

/*按顺序显示链表中的每个表格元素*/

void显示列表(结构节点*h)

{

而(h!=空)

{

display stu((struct record *)h);

printf("\n按ENTER键继续...\ n ");

while(getchar()!= ' \ n ');

h = h-& gt;接下来;

}

返回;

}

/*按学生姓名查找学生记录*/

int retrievebyn(char *fname,char *key)

{

FILE * fp

int c;

结构记录;

if((fp=fopen(fname," r))= = NULL)

{

printf("无法打开文件%s.\n ",fname);

返回0;

}

c = 0;

while(readrecord(fp,& amps)!=0)

{

if(strcmp(s.name,key)==0)

{

display stu(& amp;s);

c++;

}

}

fclose(FP);

如果(c==0)

printf("学生%s不在文件%s中,\n ",key,fname);

返回1;

}

/*按学号查找学生记录*/

int retrievebyc(char *fname,char *key)

{

FILE * fp

int c;

结构记录;

if((fp=fopen(fname," r))= = NULL)

{

printf("无法打开文件%s.\n ",fname);

返回0;

}

c = 0;

while(readrecord(fp,& amps)!=0)

{

if(strcmp(s.code,key)==0)

{

display stu(& amp;s);

c++;

打破;

}

}

fclose(FP);

如果(c==0)

printf("学生%s不在文件%s中,\n ",key,fname);

返回1;

}

主()

{

int i,j,n;

char c;

char buf[buf len];

FILE * fp

结构记录;

clr SCR();

printf("请输入学生成绩记录文件的名称:");

scanf("%s ",stuff);

if((FP = fopen(stuff," r))= = NULL)

{

printf("文件%s不存在,您想创建它吗?(是/否)”,填充);

getchar();

c = getchar();

if(c=='Y'||c=='y ')

{

FP = fopen(stuff," w ");

printf("请输入要写入文件的记录号:");

scanf("%d ",& ampn);

for(I = 0;我& ltn;i++)

{

printf("输入学生姓名:");

scanf("%s ",& amps . name);

printf("输入学生的代码:");

scanf("%s ",& amp美国代码);

for(j = 0;j & ltSWN;j++)

{

printf("输入%s标记: ",课业[j]);

scanf("%d ",& amps . marks[j]);

}

写记录(FP & amp;s);

}

fclose(FP);

}

}

fclose(FP);

getchar();

/* clrscr();*/

puts("现在您可以输入一个命令来管理记录。");

puts("m:分数的平均值。");

puts("t:总分数。");

puts("n:按学生姓名搜索记录。");

puts("c:按学生代码搜索记录。");

puts("l:列出所有记录。");

puts("s:按总数对记录进行排序和列出。");

puts("q:不干了!");

while(1)

{

puts("请输入命令:");

scanf(" %c ",& ampc);/*输入选择命令*/

if(c=='q'||c=='Q ')

{

puts("\n感谢您的使用。");

打破;/* q,结束程序运行*/

}

开关(c)

{

案例“m”:/*计算平均分*/

案例“M”:

if((n = total mark(stuff))= = 0)

{

puts("错误!");

打破;

}

printf(" \ n ");

for(I = 0;我& ltSWN;i++)

printf("%-15s的平均值为:%.2f.\n ",课业[i],(浮点)合计[I]/n);

打破;

案例' t': /*计算总分*/

案例“T”:

if((n = total mark(stuff))= = 0)

{

puts("错误!");

打破;

}

printf(" \ n ");

for(I = 0;我& ltSWN;i++)

printf("%-15s的总分是:%d.\n ",课业[i],总分[I]);

打破;

案例“n”:/*按学生姓名查找记录*/

案例“N”:

printf("请输入您要搜索的学生姓名:");

scanf("%s ",buf);

retrieve byn(stuff,buf);

打破;

案例“c”:/*按学生ID查找记录*/

案例“C”:

printf("请输入您要搜索的学生代码:");

scanf("%s ",buf);

retrievebyc(stuf,buf);

打破;

案例“l”:/*列出所有学生记录*/

案例“L”:

list stu(stuff);

打破;

案例':/*按总分降序显示*/

案例:

if((head = makelist(stuff))!=空)

displaylist(表头);

打破;

默认:break

}

}

}