学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计
記一次課程設計作業?學生成績管理系統#include
#include
#include
#include
/*
學生成績管理系統介紹
2017C語言課程設計??202160936
1.支持將數據保存到文件并從文件中讀取已有數據
2.支持添加、刪改數據
3.支持按學號或姓名查詢、刪除、修改數據
4.支持簡單統計,包括?不及格人數、最高分、最低分
5.支持按總分排序整理數據
*/
struct?student
{
char?num[10];
char?name[20];
int?cgrade;
int?sxgrade;
int?yygrade;
int?total;
float?ave;
};
struct?node
{
struct?student?data;
struct?node?*next;
}*head,*last;
int?Add(int?i)//執行增加學生記錄操作
{
struct?node?*tmp;
int?loop=1;
while?(loop)
{
printf("請按以下格式輸入數據:\n");
tmp=(struct?node?*)malloc(sizeof?(struct?node));
printf("學號姓名?C語言成績?數學成績?英語成績\n");
scanf("%s?%s?%d?%d?%d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);
tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;
tmp->data.ave=tmp->data.total/3.0;
if?(last!=NULL)
{
last->next=tmp;
last=last->next;
}
else
{
head=last=tmp;
}
last->next=NULL;
i++;
printf("添加成功!輸入1繼續錄入,輸入0終止錄入??");
int?t;
scanf("%d",&t);
if?(t==0)
loop=0;
}
return?i;
}
int?Del(int?i)//執行刪除學生記錄操作
{
char?tmpname[20];
char?tmpnum[10];
int?find=0,way;
struct?node?*tmp=head,*tmpbak=head;
printf("請選擇刪除依據:??1.學號??2.姓名?\n?");
scanf("%d",&way);
switch?(way)
{
case?1:printf("請輸入學號:");
scanf("%s",tmpnum);
while?((tmp!=NULL)&&(!find))
{
if?(!strcmp(tmpnum,tmp->data.num))
{
find=1;
break;
}
tmpbak=tmp;
tmp=tmp->next;
}
if?(!find)
{
printf("抱歉,學號?%s未查到相關數據!\n",tmpnum);
}
else
{
if?(tmpbak==tmp)
{
head=head->next;
printf("刪除成功!\n");
i--;
return?i;
}
else
{
tmpbak->next=tmp->next;
printf("刪除成功!\n");
i--;
return?i;
}
}
case?2:printf("請輸入姓名:");
scanf("%s",tmpname);
while?((tmp!=NULL)&&(!find))
{
if?(!strcmp(tmpname,tmp->data.num))
{
find=1;
break;
}
tmpbak=tmp;
tmp=tmp->next;
}
if?(!find)
{
printf("抱歉,姓名?%s未查到相關數據!\n",tmpname);
}
else
{
if?(tmpbak==tmp)
{
head=head->next;
printf("刪除成功!\n");
i--;
return?i;
}
else
{
tmpbak->next=tmp->next;
printf("刪除成功!\n");
i--;
return?i;
}
}
default:printf("選擇錯誤,查詢失敗!\n");
}
}
void?Edit(struct?node*?tmp)//執行修改學生記錄操作
{
printf("請輸入修改后的信息:\n");
printf("學號姓名?C語言成績?數學成績?英語成績\n");
scanf("%s?%s?%d?%d?%d",tmp->data.num,tmp->data.name,&tmp->data.cgrade,&tmp->data.sxgrade,&tmp->data.yygrade);
tmp->data.total=tmp->data.cgrade+tmp->data.sxgrade+tmp->data.yygrade;
tmp->data.ave=tmp->data.total/3.0;
printf("修改成功!?\n");
printf("*************************************\n");
}
void?Query()//執行查詢學生記錄操作
{
char?tmpname[20];
char?tmpnum[10];
int?find=0,way,change=0;
struct?node?*tmp=head;
printf("請選擇查詢方式:??1.學號???2.姓名?\n?");
scanf("%d",&way);
switch?(way)
{
case?1:printf("請輸入學號:");
scanf("%s",tmpnum);
while?((tmp!=NULL)&&(!find))
{
if?(!strcmp(tmpnum,tmp->data.num))
{
find=1;
printf("找到以下數據!\n");
printf("學號姓名?C語言成績?數學成績?英語成績?總分?平均分?\n");
printf("%s?%s%d%d%d%d%.2f?\n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);
printf("*************************************\n");
printf("是否修改數據??輸入1修改,輸入0取消?");
scanf("%d",&change);
if?(change)
Edit(tmp);
}
tmp=tmp->next;
}
if?(!find)
{
printf("抱歉,學號?%s未查到相關數據!\n",tmpnum);
}
break;
case?2:printf("請輸入姓名:");
scanf("%s",tmpname);
while?((tmp!=NULL)&&(!find))
{
if?(!strcmp(tmpname,tmp->data.name))
{
find=1;
printf("找到以下數據!\n");
printf("學號姓名?C語言成績?數學成績?英語成績?總分?平均分?\n");
printf("%s?%s%d%d%d%d%.2f?\n",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);
printf("*************************************\n");
printf("是否修改數據??輸入1修改,輸入0取消?");
scanf("%d",&change);
if?(change)
Edit(tmp);
}
tmp=tmp->next;
}
if?(!find)
{
printf("抱歉,姓名?%s未查到相關數據!\n",tmpname);
}
break;
default:printf("選擇錯誤,查詢失敗!\n");
}
}
void?Tongji()//執行統計學生記錄操作
{
struct?node?*tmp=head;
int?cbjg=0,sxbjg=0,yybjg=0,avebjg=0,cmax=0,sxmax=0,yymax=0,avemax=0,cmin=100,sxmin=100,yymin=100,avemin=100;
printf("正在統計數據,請稍候...\n");
while?(tmp!=NULL)
{
if?(tmp->data.cgrade<60)
cbjg++;
if?(tmp->data.cgrade>cmax)
cmax=tmp->data.cgrade;
if?(tmp->data.cgrade
cmin=tmp->data.cgrade;
if?(tmp->data.sxgrade<60)
sxbjg++;
if?(tmp->data.sxgrade>sxmax)
sxmax=tmp->data.sxgrade;
if?(tmp->data.sxgrade
sxmin=tmp->data.sxgrade;
if?(tmp->data.yygrade<60)
yybjg++;
if?(tmp->data.yygrade>yymax)
yymax=tmp->data.yygrade;
if?(tmp->data.yygrade
yymin=tmp->data.yygrade;
if?(tmp->data.ave<60)
avebjg++;
if?(tmp->data.ave>avemax)
avemax=tmp->data.ave;
if?(tmp->data.ave
avemin=tmp->data.ave;
tmp=tmp->next;
}
printf("****************************\n統計完成,數據如下:\n");
printf("C語言不及格人數:%d?最高分:%d?最低分:%d?\n",cbjg,cmax,cmin);
printf("數學不及格人數:%d?最高分:%d?最低分:%d?\n",sxbjg,sxmax,sxmin);
printf("英語不及格人數:%d?最高分:%d?最低分:%d?\n",yybjg,yymax,yymin);
printf("平均分不及格人數:%d?最高分:%d最低分:%d?\n",avebjg,avemax,avemin);
printf("**********************************\n");
}
void?Sort(int?n)//執行按降序進行排列學生記錄的操作
{
int?i,j;
struct?node?*tmp=head,*tmpbak=head->next,*bak;
bak=(struct?node?*)malloc(sizeof?(struct?node));
for(i?=?0;?i?
{
for(j?=?0;?i?+?j?
{
if(tmpbak->data.total>?tmp->data.total)
{
bak->data?=tmp->data;
tmp->data?=?tmpbak->data;
tmpbak->data?=?bak->data;
}
tmp=tmp->next;
tmpbak=tmpbak->next;
}
tmp=head;
tmpbak=head->next;
}
printf("排序完成!\n");
}
int?Save()//執行存盤操作stuinfo.dat
{
if(!head)?return?0;
FILE?*fp=fopen("stuinfo.dat","wb");
int?i=0;
while(head)
{
fwrite(&head->data,sizeof(student),1,fp);
i++;
head=head->next;
}
fclose(fp);
return?i;
}
int?load()????//從文件stuinfo.dat中載入數據
{
FILE?*fp=fopen("stuinfo.dat","rb");
if(!fp)
{
printf("Can?not?open?the?file!\n");
return?0;
}
struct?node?*tmp;
fseek(fp,0,SEEK_END);
long?end=ftell(fp);
fseek(fp,0,SEEK_SET);
int?i=0;
if(ftell(fp)==end)
{
printf("無記錄!\n");
return?0;
}
while(ftell(fp)!=end)
{
tmp=(struct?node*)malloc(sizeof(struct?node));
tmp->next=NULL;
fread(&tmp->data,sizeof(struct?student),1,fp);
i++;
if?(last!=NULL)
{
last->next=tmp;
last=last->next;
}
else
{
head=last=tmp;
}
last->next=NULL;
}
fclose(fp);
return?i;
}
void?Display()//執行將學生記錄以表格形式打印輸出至屏幕的操作
{
struct?node?*tmp=head;
printf("學號姓名?C語言成績?數學成績?英語成績?總分?平均分?\n");
while?(tmp!=NULL)
{
printf("%s?%s%d%d%d%d%.2f",tmp->data.num,tmp->data.name,tmp->data.cgrade,tmp->data.sxgrade,tmp->data.yygrade,tmp->data.total,tmp->data.ave);
tmp=tmp->next;
printf("\n");
}
}
void?Wrong()//給出按鍵錯誤提示
{
printf("輸入錯誤,請重新輸入!?\n");
}
int?Quit()//存盤且退出
{
Save();
return?0;
}
int?Menu()//操作選單
{
int?i;
printf("========================================================\n");
printf("歡迎使用學生成績管理系統!\n");
printf("?0:?存盤并退出\n");
printf("?1:增加學生記錄\n");
printf("?2:刪除學生記錄\n");
printf("?3:查詢/修改學生記錄\n");
printf("?4:統計學生記錄\n");
printf("?5:按降序進行排列學生記錄\n");
printf("?6:將學生記錄以表格形式打印輸出至屏幕\n");
printf("========================================================\n");
printf("請選擇你需要的操作:");
scanf("%d",&i);
printf("\n");
return?i;
}
void?main()
{
int?i,choice,loop=1;
i=load();
printf("從stuinfo.dat導入了%d條數據\n\n",i);
while?(loop)
{
choice=Menu();
switch?(choice)
{
case?0:loop=Quit();break;
case?1:i=Add(i);break;
case?2:i=Del(i);break;
case?3:Query();break;
case?4:Tongji();break;
case?5:Sort(i);break;
case?6:printf("共有%d條數據!\n",i);Display();break;
default:Wrong();
}
}
}
總結
以上是生活随笔為你收集整理的学生成绩统计c语言课程设计,学生成绩管理系统-C语言课程设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flink常见流处理API
- 下一篇: java信息管理系统总结_java实现科