#include#include#include#define LEN sizeof(struct Student)
struct Student
{int clas;
int num;
char name[20];
char cou[20];
int score;
struct Student *next;
};
struct Student *creat(void)
{struct Student *head;
struct Student *p1,*p2;
int n=0;
printf("班級 學號 姓名 課程 得分(輸入0 0 0 0 0結(jié)束):\n");
p1=p2=(struct Student*)malloc(LEN);
scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score);
head=NULL;
while(p1->num!=0)
{n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Student*)malloc(LEN);
scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score);
}
p2->next=NULL;
return(head);
}
void shuchu(struct Student *pt)
{printf("\n");
printf("班級 學號 姓名 課程 得分:\n");
while (pt!=NULL)
{printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score);
pt=pt->next;
}
printf("\n");
}
void add(struct Student *pt)
{struct Student *p1,*p2,*head;
head=pt;
printf("請輸出你要添加的學生信息:\n");
while(pt->next!=NULL)
{pt=pt->next;
}
p1=p2=pt;
printf("班級 學號 姓名 課程 得分(輸入0 0 0 0 0結(jié)束):\n");
do
{p1=(struct Student*)malloc(LEN);
scanf("%d%d%s%s%d",&p1->clas,&p1->num,p1->name,p1->cou,&p1->score);
p2->next=p1;
p2=p1;
}while(p1->num!=0);
p2->next=NULL;
shuchu(head);
}
void del(struct Student *pt)
{int n;
printf("請輸入你要刪除的學生的學號:\n");
scanf("%d",&n);
if(n==pt->num)
{pt->next=pt->next->next;
printf("已刪除學生信息\n");
}
while(n!=(pt->next)->num)
{pt=pt->next;
}
pt->next=pt->next->next;
printf("已刪除學生信息\n");
printf("\n");
}
void order(struct Student *pt)
{struct Student *first,*t,*p,*q;
first=pt->next;
pt->next=NULL;
while(first!=NULL)
{for(t=first,q=pt;((q!=NULL)&&(q->scorescore));p=q,q=q->next);
first = first->next;
if(q==pt)
pt=t;
else
p->next=t;
t->next=q;
}
shuchu(pt);
}
void max(struct Student *pt)
{struct Student *max;
max=pt;
while(pt->next!=NULL)
{if((max->score)<(pt->next->score))
{ max=pt->next;
}
pt=pt->next;
}
printf("\n");
printf("班級 學號 姓名 課程 得分:\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",max->clas,max->num,max->name,max->cou,max->score);
printf("\n");
}
void min(struct Student *pt)
{struct Student *min;
min=pt;
while(pt->next!=NULL)
{if((min->score)>(pt->next->score))
{ min=pt->next;
}
pt=pt->next;
}
printf("\n");
printf("班級 學號 姓名 課程 得分:\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",min->clas,min->num,min->name,min->cou,min->score);
printf("\n");
}
void aver(struct Student *pt)
{int n=0;
float aver,sum=0.0;
while(pt!=NULL)
{sum+=pt->score;
n++;
pt=pt->next;
}
aver=(float)sum/n;
printf("\n");
printf("平均分:%f\n",aver);
printf("\n");
}
void jigelv(struct Student *pt)
{int n=0;
float jigelv=0.0,s=0.0;
while(pt!=NULL)
{if((pt->score)>=60)
{ n++;
}
s++;
pt=pt->next;
}
jigelv=n/s*100;
printf("\n");
printf("及格率:百分之%f",jigelv);
printf("\n");
}
void search(struct Student *pt)
{void num(struct Student *pt);
void name(struct Student *pt);
void cou(struct Student *pt);
int n;
printf("\n");
printf("請輸入你要查詢學生的 1 學號 2 姓名 3 課程名:\n");
scanf("%d",&n);
switch(n)
{case 1:num(pt);break;
case 2:name(pt);break;
case 3:cou(pt);break;
default:printf("error!\n");
}
}
void num(struct Student *pt)
{int n;
printf("\n");
printf("請輸入你要查詢學生的學號:\n");
scanf("%d",&n);
while(pt->num!=n)
{pt=pt->next;
}
printf("班級 學號 姓名 課程 得分:\n");
printf("\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score);
}
void name(struct Student *pt)
{char name[20];
scanf("%s",name);
printf("\n");
printf("請輸入你要查詢學生的姓名:\n");
while(strcmp(pt->name,name)!=0)
{pt=pt->next;
}
printf("班級 學號 姓名 課程 得分:\n");
printf("\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score);
}
void cou(struct Student *pt)
{char cou[20];
scanf("%s",cou);
printf("\n");
printf("請輸入你要查詢學生的課程名:\n");
while(strcmp(pt->cou,cou)!=0)
{pt=pt->next;
}
printf("班級 學號 姓名 課程 得分:\n");
printf("\n");
printf("%-5d%-5d%-5s%-5s%-5d\n",pt->clas,pt->num,pt->name,pt->cou,pt->score);
}
void save(struct Student *pt)
{FILE *fp;
if((fp=fopen("D:\\student information.txt","w"))==NULL)
{printf("can't open file!\n");
exit(0);
}
while(pt!=NULL)
{if(fwrite(pt,sizeof(struct Student),1,fp)!=1)
printf("file write error\n");
pt=pt->next;
}
printf("存儲完成\n");
fclose(fp);
}
void main()
{FILE *fp;
int i;
struct Student *pt;
pt=creat();
if((fp=fopen("D:\\xia.txt","w"))==NULL)
{printf("can't open file!\n");
exit(0);
}
shuchu(pt);
printf("請輸入你想要實現(xiàn)的功能的序號\n1 添加學生信息\n2 刪除學生信息\n3 學生成績排序\n4 最高分\n5 最低分\n6 平均分\n7 及格率\n8 查詢學生\n9 退出\n");
for(;;)
{scanf("%d",&i);
switch(i)
{case 1:add(pt);break;
case 2:del(pt);break;
case 3:order(pt);break;
case 4:max(pt);break;
case 5:min(pt);break;
case 6:aver(pt);break;
case 7:jigelv(pt);break;
case 8:search(pt);break;
case 9:exit(0);break;
default:printf("error!\n");
}
}
save(pt);
}
二、程序設計報告
1、課程設計目的C語言程序設計課程設計是計算機科學與技術(shù)專業(yè)重要的實踐性教學環(huán)節(jié)之一,本次設計結(jié)合實際應用的要求,使課程設計既覆蓋C語言的知識點,又接近工程實際需要。目的是通過課程設計的綜合訓練,培養(yǎng)學生實際分析問題、解決問題的能力,以及編程和動手能力,最終目標是通過課程設計這種形式,幫助學生系統(tǒng)掌握C語言程序設計這門課程的主要內(nèi)容,養(yǎng)成良好的編程習慣,更好的完成教學任務。
2、課程設計任務與要求:本次課程設計利用《C語言程序設計》課程中所學到的編程知識和編程技巧,完成具有一定難度和工作量的程序設計題目,幫助學生掌握編程、調(diào)試的基本技能,獨立完成所布置的任務。
要求:
1、對系統(tǒng)進行功能需求分析
2、設計合理的數(shù)據(jù)結(jié)構(gòu)和系統(tǒng)框架
3、編程簡練,程序功能齊全,能正確運行
4、說明書、流程圖要清楚
5、課題完成后必須按要求提交課程設計報告
任務:
設計一個學生成績排名系統(tǒng)
實現(xiàn)功能:
概要設計
首先拿到這個課程題,學生成績管理系統(tǒng),數(shù)組或動態(tài)鏈表都可以去解決,我選擇了動態(tài)鏈表,在主函數(shù)中調(diào)用函數(shù)來達到功能的實現(xiàn)。函數(shù)包括添加,刪除,排序,最高分。最低風,及格率,平均分,查詢。都將以輸入的學生信息作為傳參。
詳細設計
1、因為不知道具體的學生人數(shù),所以我選擇了去使用動態(tài)鏈表去實現(xiàn)輸入學生信息的功能。
使用動態(tài)鏈表的時候,對于添加個人信息,刪除,排序等問題的難度比較大,需要好好思考問題的難點,再去設計算法解決。
2、題目所蘊含的功能包括添加,刪除,排序,最高分。最低風,及格率,平均分,查詢。這些功能選擇使用switch函數(shù)去進行分類輸入,分類調(diào)用。盡量使功能齊全方便。對于最高分,最低分,平均分,及格率這些問題。平時解決的也比較多一些常用辦法即可。對于添加個人信息,需要在動態(tài)鏈表的最后再加上個人信息,刪除和查詢感覺是一類問題,需要一一去匹配個人信息。排序在這里是個比較麻煩的問題,因為使用的是動態(tài)鏈表。所以比數(shù)組處理起來要麻煩一點。
3、以上的知識點大概要用到stdio,stdlib,string三個頭文件即可。
4、界面美觀簡潔即可。
圖1:
ADD函數(shù): 將動態(tài)鏈表指向最后一個,然后在鏈表末尾創(chuàng)建新的空間去連接,再輸出新的鏈表。
圖2:
DEL函數(shù):輸入學號 讓它和鏈表中的學號一一對比,
圖3:
MAX函數(shù):擂臺算法 將第一個賦值給max 然后讓max與后面的比較,這樣可以不破壞原函數(shù)。
圖4:
平均數(shù)函數(shù):這個算法比較簡單就建立一個循環(huán),在其中計算人數(shù)的多少,利用累加算出總分數(shù)有多少,再算出平均分。
圖5:
及格率函數(shù):和平均值函數(shù)差不多,只需要循環(huán)將滿足條件的選出來,最后將數(shù)值計算出來即可。
圖9:
4、課程設計成果(運行截圖)5、課程設計心得通過這次課程設計,我意識到了c語言在程序設計中的重要性,和它的實用性,在一個學年的學習中,從一開始的輸入,輸出。到后面的函數(shù),指針,鏈表。不斷地學習和實踐讓我的c語言技術(shù)有了一個較好的基礎,這也歸功于戴老師的教導。此次課程設計,是我第一次去編寫的一個較大的程序。在其中我意識到了自己的不足,即動態(tài)鏈表的使用,但是在設計中,我拋棄自己擅長的數(shù)組,去使用動態(tài)鏈表在一次次調(diào)試中,理清楚動態(tài)鏈表的操作方法。但還是在鏈表排序的問題上遇到了麻煩,通過上網(wǎng)查找資料,和同學進行討論后終于將問題解決。我覺得此次課程設計十分有意義,它是對我們c語言學習的一次總結(jié),讓我們將所學知識融會貫通,去用于實踐。我覺得c語言是基礎,只有打好基礎才能在以后的程序語言學習中有一個較好的發(fā)展?;仡櫰鸫舜螁纹瑱C課程設計,至今我仍感慨頗多,的確,從理論到實踐,可以說得是苦多于甜,但是可以學到很多很多的的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。
喜歡的點個贊收藏一下唄!感謝支持!
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧