学生成绩管理系统C课设程序.docx

上传人:b****5 文档编号:7887882 上传时间:2023-01-27 格式:DOCX 页数:15 大小:19.08KB
下载 相关 举报
学生成绩管理系统C课设程序.docx_第1页
第1页 / 共15页
学生成绩管理系统C课设程序.docx_第2页
第2页 / 共15页
学生成绩管理系统C课设程序.docx_第3页
第3页 / 共15页
学生成绩管理系统C课设程序.docx_第4页
第4页 / 共15页
学生成绩管理系统C课设程序.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统C课设程序.docx

《学生成绩管理系统C课设程序.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C课设程序.docx(15页珍藏版)》请在冰豆网上搜索。

学生成绩管理系统C课设程序.docx

学生成绩管理系统C课设程序

#include

#include

/*控制学生记录的容量*/

#defineN50

structstudent

{charnum[11];

charname[20];

intscore[3];

floatave;

}stu[N];

/*全新保存函数*/

save(intn)/*保存函数,保存n个记录*/

{FILE*fp;

inti;

if((fp=fopen("score.txt","wb"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/

{printf("\nCannotopenfile\n");

returnNULL;

}

for(i=0;i

if(stu[i].ave!

=0)/*stu[i].ave=0表此记录已删除*/

if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)

printf("filewriteerror\n");

fclose(fp);

}

/*加载记录或可以计算记录个数的函数*/

load()/*加载记录或可以计算记录个数的函数*/

{FILE*fp;

inti;

if((fp=fopen("score.txt","rb"))==NULL)/*以输出打开方式,在此前的记录被覆盖*/

{printf("\nCannotopenfile\n");

returnNULL;

}

for(i=0;!

feof(fp);i++)

fread(&stu[i],sizeof(structstudent),1,fp);

fclose(fp);

return(i-1);/*返回记录个数*/

}

/*一个任务结束时的选择浏览还是返回的函数*/

voidprintf_back()/*一个任务结束时的选择浏览还是返回*/

{intk,w;

printf("\n\n\tSuccessful.^_^\n\n");

printf("Whatdoyouwanttodo?

\n\n\t1).Browseallnow\t2).Back:

[]\b\b");

scanf("%d",&w);

if(w==1)browse();

elsemenu();

}

/*显示数据结构项目函数*/

voidprintf_face()/*显示数据结构项目*/

{printf("\n\tNO.namescore1score2score3average\n");

}

average(inti)/*对第i个记录的分数求平均值*/

{intj,sum;

for(sum=0,j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].ave=sum/3.0;

}

/*学号输入函数*/

no_input(inti,intn)/*i表示第i个的学生信息,n表示比较到第n个学生*/

{intj,k,w1;

do

{w1=0;

printf("NO.:

");

scanf("%s",stu[i].num);

for(j=0;stu[i].num[j]!

='\0';j++)/*学号输入函数,作了严格规定*/

if(stu[i].num[j]<'0'||stu[i].num[j]>'9')/*判断学号是否为数字*/

{puts("Inputerror!

Onlybemadeupof(0-9).Pleasereinput!

\n");

w1=1;break;

}

if(w1!

=1)

for(k=0;k

/*排除第i个学生记录即你要修改的*/

if(k!

=i&&strcmp(stu[k].num,stu[i].num)==0)/*判断学号是否有雷同*/

{puts("Thisrecordisexist.pleasereinput!

\n");

w1=1;break;

}

}

while(w1==1);

}

/*对分数输入*/

score_input(inti)

{intj;

for(j=0;j<3;j++)

{printf("score%d:

",j+1);

scanf("%d",&stu[i].score[j]);

}

}

/*输入一个记录函数*/

input(inti)/*输入一个记录函数*/

{

no_input(i,i);/*调用学号输入函数*/

printf("name:

");

scanf("%s",stu[i].name);

score_input(i);/*调用分数输入函数*/

average(i);/*调用求平均值函数*/

}

/*显示一个记录的函数*/

printf_one(inti)/*显示一个记录的函数*/

{intj;

printf("%11s%-17s",stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf("%9d",stu[i].score[j]);

printf("%9.2f\n",stu[i].ave);

}

voidputs___()/*显出---函数*/

{puts("\n--------------------------------------------------------------------");

}

/*修改记录函数*/

modify_data(inti,intn)/*修改数据函数,修改第i个记录*/

{intc,w1;

do/*输入选择作个判断*/

{puts("\nmodifyby=>\n\n1).NO.2.name3).score14).score2\n5).score36).allscore7).alldata8).cancelandback");

printf("Whichyouneeded?

:

[]\b\b");

scanf("%d",&c);

if(c>8||c<1)

{puts("\nChoiceerror!

Pleaseagain!

");/*判断选择是否错误,若是则重新选择性*/

getchar();/*当输入是字符时可以防止死循环*/

}

}

while(c>8||c<1);

do

{switch(c)/*选择要修改的项目*/

{case1:

no_input(i,n);break;/*调用学号输入函数*/

case2:

printf("name:

");scanf("%s",stu[i].name);break;

case3:

printf("score1:

");scanf("%d",&stu[i].score[0]);break;

case4:

printf("score2:

");scanf("%d",&stu[i].score[1]);break;

case5:

printf("score3:

");scanf("%d",&stu[i].score[2]);break;

case6:

score_input(i);break;/*调用分数输入函数*/

case7:

input(i);break;/*调用输入整条学生记录*/

case8:

menu();/*直接返回主介面*/

}

if(c>2&&c<7)

average(i);/*调用求平均值函数*/

puts("\nNow:

\n");

printf_face();/*调用显示数据结构项目函数*/

printf_one(i);/*修改后的记录让用户确认*/

printf("\nAreyousure?

\n\n\t1).Sure2).Noandremodify3).Backwithoutsaveinthistime[]\b\b");/*是否确定*/

scanf("%d",&w1);/*选择2则表示这次修改错误要重新修改*/

}

while(w1==2);

return(w1);/*返回控制值*/

}

/****************输入模块****************/

enter()/*输入模块*/

{inti,n;

printf("Howmanystudents(0-%d)?

:

",N-1);

scanf("%d",&n);/*要输入的记录个数*/

printf("\nEnterdatanow\n\n");

for(i=0;i

{printf("\nInput%dthstudentrecord.\n",i+1);

input(i);/*调用输入函数*/

}

if(i!

=0)save(n);/*调用保存函数*/

printf_back();/*一个任务结束时让用户选择是浏览还是返回*/

}

/****************追加模块****************/

add()/*追加模块*/

{inti,n,m,k;

FILE*fp;

n=load();

printf("Howmanystudentsareyouwanttoadd(0-%d)?

:

",N-1-n);

scanf("%d",&m);/*输入要追加的记录个数*/

k=m+n;

for(i=n;i

{printf("\nInput%dthstudentrecord.\n",i-n+1);

input(i);/*调用输入函数*/

}

if((fp=fopen("score.txt","ab"))==NULL)/*以ab方式打开文件,追加保存*/

{printf("cannotopenfile\n");

return;

}

for(i=n;i

if(fwrite(&stu[i],sizeof(structstudent),1,fp)!

=1)

printf("filewriteerror\n");

fclose(fp);

printf_back();/*一个任务结束时的选择浏览还是返回*/

}

/****************修改模块****************/

modify()/*修改模块*/

{structstudents;

FILE*fp;

inti,n,k,w0=1,w1,w2=0;

n=load();

do

{//clrscr();

k=-1;

/*给用户看全部记录以便确认要修改的记录*/

puts___();/*显示-----*/

printf_face();/*调用显示数据结构项目函数*/

for(i=0;i

{if((i!

=0)&&(i%10==0))/*目的是分屏显示*/

{printf("\n\nRememberNO.whichneededmodify.passanykeytocontiune...");

getch();

puts("\n\n");

}

printf_one(i);/*调用显示一个记录的函数*/

}

puts___();

do

{printf("\n\nEnterNO.thatyouwanttomodify!

NO.:

");

scanf("%s",s.num);/*输入要修改的数据的学号*/

for(i=0;i

if(strcmp(s.num,stu[i].num)==0)

{k=i;/*找到要修改的记录*/

s=stu[i];/*把stu[i](即当次修改的学生记录)备份给s,以便用户反悔时恢复名誉*/

}

if(k==-1)printf("\n\nNOexist!

pleaseagain");

}

while(k==-1);/*当K=-1表示没有找到*/

printf_face();/*调用显示数据结构项目函数*/

printf_one(k);/*调用显示一个记录的函数*/

w1=modify_data(k,n);/*修改学生记录并且返回保存控制值w1,w1=1则表示用户已确认修改*/

if(w1==1)/*W1等于1时则表示用户确定这次修改*/

{printf("\nSuccessful^_^.\n\nAreyoumodifyanother?

\n\n\t1).Yes2).Backwithsave\t[]\b\b");

scanf("%d",&w0);

w2=1;/*来控制保存,使w2=1是标记已有过修改*/

}

else

{w0=0;

if(w2==1)

stu[k]=s;

}/*走到这里是由于用户没有确认这次修改(在调用修改函数w1=modify_data(k,n);时没有确认).使W0=0,为了让终止循环,

stu[k]=s,则把备份的s恢复给stu[k](即当次修改的),这样的好处是确保在此之前修改过的成功保存,而本次(用户没有确认的)不修改*/

if(w0!

=1&&w2==1)/*W0不等于1则表示正常返回,w2=1表示在此之前有过修改,这时就保存用户已确认修改的并返回*/

save(n);/*w2不等于1表示在此次之前没有修改过(即:

第一次),而又反悔这次修改,则不保存返回*/

}

while(w0==1);

menu();

}

/****************删除模块****************/

del()/*删除模块*/

{structstudents;

FILE*fp;

inti,j,n,k,c,w0=1;

n=load();

do

{//clrscr();

k=-1;

/*给用户看全部记录以便确认要删除的记录*/

puts___();

printf_face();/*调用显示数据结构项目函数*/

for(i=0;i

if(stu[i].ave!

=0)

{if((i!

=0)&&(i%10==0))/*目的是分屏显示,每10个一屏*/

{printf("\n\nRememberNO.whichneededdel.passanykeytocontiune...");

getch();

puts("\n\n");

}

printf_one(i);/*调用显示一个记录的函数*/

}

puts___();

do

{printf("\n\nEnterNO.thatyouwanttoDelete!

NO.:

");

scanf("%s",s.num);/*输入要修改的数据的学号*/

for(i=0;i

if(strcmp(s.num,stu[i].num)==0)

{k=i;/*找到要修改的记录的下标赋给K*/

s=stu[i];

}

if(k==-1)printf("\n\nNOexist!

pleaseagain");/*K=-1,表示没有找到相同之的*/

}

while(k==-1);

puts("\n");

printf_face();/*调用显示数据结构项目函数*/

printf_one(k);/*调用显示一个记录的函数*/

printf("\nAreyousure?

\n\t1).sure2).noanddelanother3).backwithoutsaveall[]\b\b");

scanf("%d",&c);

if(c==1)

{stu[k].ave=0;/*stu[k].ave=0用来标识这个记录是要删除的.保存时则不保存stu[k].ave=0的数据*/

printf("\n\nSuccessful^_^.\n\nAreyouagain?

\n\t1).again2).backtomenu\t[]\b\b");/*问是否继续*/

scanf("%d",&w0);

}

if(c==3)w0=0;/*w0=0不删除直接返回*/

if(w0!

=1&&c!

=3)/*只有当确认删除后返回才保存,不删除直接返回则不保存,且不保存在此之前删除过的记录*/

save(n);

}

while(w0==1);

menu();/*返回主介面*/

}

/****************浏览(全部)模块****************/

browse()/*浏览(全部)模块*/

{inti,j,n;

n=load();/*加载记录*/

//clrscr();

puts___();

printf_face();/*调用显示数据结构项目函数*/

for(i=0;i

{if((i!

=0)&&(i%10==0))/*目的是分屏显示*/

{printf("\n\nPassanykeytocontiune...");

getch();

puts("\n\n");

}

printf_one(i);/*调用显示一个记录的函数*/

}

puts___();

printf("\tThereare%drecord.\n",n);

printf("\nPassanykeytoback...");

getch();/*按任意健*/

menu();

}

/****************查找模块****************/

search()/*查找模块*/

{inti,n,k,w1=1,w2,w3,w4;

structstudents;

n=load();

do

{

do

{k=-1;

printf("\n\nEnternamethatyouwanttosearch!

name:

");

scanf("%s",s.name);/*输入要修改的数据的学号*/

printf_face();/*调用显示数据结构项目函数*/

for(i=0;i

if(strcmp(s.name,stu[i].name)==0)

{k=i;/*找到要修改的记录*/

printf_one(k);break;/*调用显示一个记录的函数*/

}

if(k==-1)

{printf("\n\nNOexist!

please");

printf("\n\nAreyouagain?

\n\t1).again2).NOandback[]\b\b");

scanf("%d",&w1);

w2=0;//保证在第一次找到的基础上再查找找不到时能退出

}

}

while(k==-1&&w1==1);/*如果w1不等于1则直接返回*/

w4=0;w3=0;

if(k!

=-1)/*k不等于-1表示找到,如果找到则选择操作*/

{printf("\n\nWhatdoyouwanttodo?

\n\t1).Searchanother2).Modify3).Delete4).Backmenu[]\b\b");

scanf("%d",&w2);

switch(w2)

{case2:

w3=modify_data(k,n);break;/*调用修改数据函数*/

case3:

{printf("\nAreyousure?

\n\t1).Sure2).Noandback[]\b\b");

scanf("%d",&w4);

if(w4==1)

stu[k].ave=0;/*表示删除*/

break;

}

}

if(w3==1||w4==1)

{save(n);

printf("\n\nSuccessful.^_^.");

printf("\n\nWhatdoyouwanttodo?

\n\t1).Searchanother2).Back[]\b\b");

scanf("%d",&w2);

}

}

}

while(w2==1);

menu();

}

/****************插入模块****************/

insert()/*插入模块*/

{inti,j,n,c;

structstudents;

n=load();

puts("\nInputonedata.\n");

do

{input(n);/*输入到第n个记录,即插入到最后*/

printf_face();

printf_one(n);

printf("\n\nAreyousure?

\n\n\t1).Sure\t2).cancelsndagain\t3).Backwithuotsave[]\b\b");

scanf("%d",&c);

if(c==1)

{for(j=0;j

for(i=n;i>j;i--)

if(stu[i].ave>stu[i-1].ave)

{s=stu[i-1];stu[i-1]=stu[i];stu[i]=s;}

save(n+1);

printf_back();

}

elseif(c!

=2)menu();

}

while(c==2);

}

/****************排序模块(按平均成绩)****************/

order()/*排序模块(按平均成绩)*/

{inti,j,k,n;

structstudents;

n=load();

for(i=0;i

{k=i;

for(j=i+1;j

if(stu[j].ave>stu[k].ave)k=j;

s=stu[i];stu[i]=stu[k];stu[k]=s;

}

save(n);

puts("\n\n");

printf_back();

}

/****************主界面****************/

menu()/*主界面*/

{intn,w1;

do

{//clrscr();/*清屏*/

puts("\t\t*********************MENU*********************\n\n");

puts("\t\t\t\t1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1