C語(yǔ)言實(shí)現(xiàn)運(yùn)動(dòng)會(huì)管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)運(yùn)動(dòng)會(huì)管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
問(wèn)題描述:
(1) 初始化輸入:N-參賽院系總數(shù),M-男子競(jìng)賽項(xiàng)目數(shù),W-女子競(jìng)賽項(xiàng)目數(shù);
(2) 各項(xiàng)目名次取法有如下幾種:
取前5名:第1名得分 7,第2名得分 5,第3名得分3,第4名得分2,第5名得分 1;
(3) 由程序提醒用戶(hù)填寫(xiě)比賽結(jié)果,輸入各項(xiàng)目獲獎(jiǎng)運(yùn)動(dòng)員的信息。
(4) 所有信息記錄完畢后,用戶(hù)可以查詢(xún)各個(gè)院系或個(gè)人的比賽成績(jī),生成團(tuán)體總分報(bào)表,查看參賽院系信息、獲獎(jiǎng)運(yùn)動(dòng)員、比賽項(xiàng)目信息等。
C語(yǔ)言實(shí)現(xiàn)程序如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> ? typedef struct stunode { ?? ?char sport[20]; ?? ?char sex[10]; ?? ?char name[10]; ?? ?char college[20]; ?? ?char grade[10];? ?? ?int rank; ?? ?struct stunode *next; }STU; ??? ??? ??? ?/*定義鏈表結(jié)點(diǎn)的結(jié)構(gòu)體類(lèi)型struct stunode,取別名STU*/? STU head;?? ??? ?/*定義頭結(jié)點(diǎn)head*/ char stu[20][20];?? ??? ?/*定義結(jié)構(gòu)體數(shù)組stu[20][20],用于存放院系名*/? void maininterface(); void createList(); void printall(); void findperson(); void findcollege(); void freelist(); void findcollogescore(); void modify(); void allscore(); void getprize();? int getscore(); int N,M,W;?? ??? ?/*定義整型N,M,W,用于初始化存放參賽院系總數(shù)、男子競(jìng)賽項(xiàng)目數(shù)和女子競(jìng)賽項(xiàng)目數(shù)*/ int k=0;?? ??? ?/*用于創(chuàng)建鏈表時(shí)的計(jì)數(shù)(區(qū)分首次創(chuàng)建鏈表和再次創(chuàng)建鏈表)*/? int main(int argc, char *argv[]) ?{ ??? ?int i; ?? ?int select; ?? ?head.next=NULL;?? ??? ?/*將頭結(jié)點(diǎn)的next至為NULL*/? ?? ?printf("\t\t\t------------------------\n"); ?? ?printf("\t\t\t*******系統(tǒng)初始化*******\n"); ?? ?printf("\t\t\t1.請(qǐng)輸入?yún)①愒合悼倲?shù):"); ?? ?scanf("%d",&N);?? ? ?? ?printf("\t\t\t2.請(qǐng)輸入男子競(jìng)賽項(xiàng)目數(shù):"); ?? ?scanf("%d",&M); ?? ?printf("\t\t\t3.請(qǐng)輸入女子競(jìng)賽項(xiàng)目數(shù):"); ?? ?scanf("%d",&W); ?? ?printf("\t\t\t4.請(qǐng)輸入?yún)①惖脑合得?); ?? ?for(i=0;i<N;i++) ?? ?{ ?? ??? ?scanf("%s",&stu[i])?? ?; ?? ?} ?? ?printf("\n\t\t\t-----------------------\n"); ?? ?printf("\t\t\t ?運(yùn)動(dòng)會(huì)參賽學(xué)院有:"); ?? ?for(i=0;i<N;i++) ?? ?{ ?? ??? ?printf("%s ",stu[i])?? ?; ?? ?} ?? ?printf("\n\t\t\t"); ?? ?system("pause"); ?? ?while(1) ?? ?{ ?? ??? ?maininterface(); ?? ??? ?printf("\n*請(qǐng)選擇需要的操作:"); ?? ??? ?scanf("%d",&select); ?? ??? ?fflush(stdin);?? ?/*清除鍵盤(pán)緩沖區(qū)*/? ?? ??? ?switch(select)?? ?/*根據(jù)用戶(hù)選擇,調(diào)用相應(yīng)函數(shù)完成操作*/? ?? ??? ?{ ?? ??? ??? ?case 1:createList();break; ?? ??? ??? ?case 2:findperson();break; ?? ??? ??? ?case 3:findcollege();break; ?? ??? ??? ?case 4:findcollogescore();break; ?? ??? ??? ?case 5:allscore();break; ?? ??? ??? ?case 6:getprize();break; ?? ??? ??? ?case 7:modify();break; ?? ??? ??? ?case 8:printall();break; ?? ??? ??? ?case 0:freelist();exit(0); ?? ??? ??? ?default:printf("輸入錯(cuò)誤!\n"); ?? ??? ?}? ?? ??? ?system("pause"); ?? ?} ?? ?return 0; } /*函數(shù)功能:顯示菜單*/? void maininterface() { ?? ?system("cls");?? ?/*清屏*/? ?? ?printf("\t\t--------------------------\n"); ?? ?printf("\t\t******運(yùn)動(dòng)會(huì)管理系統(tǒng)******\n"); ?? ?printf("\t\t1.輸入項(xiàng)目獲獎(jiǎng)信息\n");? ?? ?printf("\t\t2.查詢(xún)個(gè)人的比賽成績(jī)\n");? ?? ?printf("\t\t3.查詢(xún)?cè)合档谋荣愋畔n"); ?? ?printf("\t\t4.查詢(xún)?cè)合档谋荣惓煽?jī)\n"); ?? ?printf("\t\t5.生成團(tuán)體總分報(bào)表\n"); ?? ?printf("\t\t6.查看各項(xiàng)目獲獎(jiǎng)運(yùn)動(dòng)員信息\n"); ?? ?printf("\t\t7.修改項(xiàng)目信息\n"); ?? ?printf("\t\t8.顯示所有信息\n"); ?? ?printf("\t\t0.退出\n"); ?? ?printf("\t\t--------------------------\n"); ?? ?return; }
功能函數(shù)如下:
/*函數(shù)功能:創(chuàng)建某項(xiàng)目的n個(gè)獲獎(jiǎng)信息*/? void createList() { ?? ?int i,n,j=0; ?? ?int a,b; ?? ?float c; ?? ?int grade1[60],grade2[60];? ?? ?int place[60]; ?? ?char sport4[20]="跳高",sport5[20]="跳高",sport6[20]="鉛球";? ?? ?STU *p,*tail,*p3; ?? ?if(k==0)?? ??? ?/*首次創(chuàng)建鏈表*/? ?? ?{ ?? ??? ?k++; ?? ??? ?if(head.next!=NULL) ?? ??? ?{ ?? ??? ??? ?printf("項(xiàng)目獲獎(jiǎng)鏈表已創(chuàng)建!\n"); ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?tail=&head;?? ??? ??? ?/*初始建立鏈表tail指向頭結(jié)點(diǎn)head*/? ?? ??? ?printf("*請(qǐng)輸入?yún)①惾藬?shù):"); ?? ??? ?scanf("%d",&n); ?? ??? ?printf("\n------------------------\n"); ?? ??? ?for(i=1;i<=n;i++)?? ??? ?/*輸入n個(gè)項(xiàng)目信息到鏈表中*/? ?? ??? ?{ ?? ??? ??? ?p=(STU *)malloc(sizeof(STU));?? ??? ?/*新建立一個(gè)結(jié)點(diǎn)*/? ?? ??? ??? ?if(p==NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("建立鏈表時(shí)內(nèi)存分配失?。n"); ?? ??? ??? ??? ?return;? ?? ??? ??? ?} ?? ??? ??? ?printf("項(xiàng)目 性別 姓名 學(xué)院 成績(jī)\n"); ?? ??? ??? ?scanf("%s%s%s%s%f",p->sport,p->sex,p->name,p->college,&p->grade); ?? ??? ??? ?/*將結(jié)點(diǎn)添加到鏈表尾部*/? ?? ??? ??? ?p->rank=0; ?? ??? ??? ?grade1[j]=p->grade; ?? ??? ??? ?j++; ?? ??? ??? ?tail->next=p;?? ??? ?/*將p所指結(jié)點(diǎn)的next賦給新結(jié)點(diǎn)的next*/ ?? ??? ??? ?p->next=NULL;?? ??? ?/*將新結(jié)點(diǎn)的地址賦給p所指結(jié)點(diǎn)的next*/ ?? ??? ??? ?tail=p; ?? ??? ?} ?? ??? ?if(strcmp(p->sport,sport4)==0||strcmp(p->sport,sport5)==0||strcmp(p->sport,sport6)==0) ?? ??? ?{ ?? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*初始化palce,grade2和grade1*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?place[i]=0; ?? ??? ??? ??? ?grade2[i]=0; ?? ??? ??? ?} ?? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?grade2[i]=grade1[i]; ?? ??? ??? ?} ?? ??? ??? ?for(a=0;a<j-1;a++)?? ??? ?/*利用冒泡法進(jìn)行排序*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(b=0;b<j-a-1;b++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(grade2[b]<grade2[b+1]) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?c=grade2[b];?? ??? ?/*交換數(shù)據(jù)*/ ?? ??? ??? ??? ??? ??? ?grade2[b]=grade2[b+1]; ?? ??? ??? ??? ??? ??? ?grade2[b+1]=c; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*比較,找到所對(duì)應(yīng)的排名*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(a=0;a<j;a++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(grade2[i]==grade1[a]) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?place[a]=i+1; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?p3=head.next; ?? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?p3->rank=place[i]; ?? ??? ??? ??? ?p3=p3->next; ?? ??? ??? ?} ?? ??? ?}else{ ?? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*初始化palce,grade2和grade1*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?place[i]=0; ?? ??? ??? ??? ?grade2[i]=0; ?? ??? ??? ?} ?? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ?{ ?? ??? ??? ??? ?grade2[i]=grade1[i]; ?? ??? ??? ?} ?? ??? ??? ?for(a=0;a<j-1;a++)?? ??? ?/*利用冒泡法進(jìn)行排序*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(b=0;b<j-a-1;b++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(grade2[b]>grade2[b+1]) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?c=grade2[b];?? ??? ?/*交換數(shù)據(jù)*/ ?? ??? ??? ??? ??? ??? ?grade2[b]=grade2[b+1]; ?? ??? ??? ??? ??? ??? ?grade2[b+1]=c; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*比較,找到所對(duì)應(yīng)的排名*/ ?? ??? ??? ?{ ?? ??? ??? ??? ?for(a=0;a<j;a++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(grade2[i]==grade1[a]) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?place[a]=i+1; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?p3=head.next; ?? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ?{?? ? ?? ??? ??? ??? ?p3->rank=place[i]; ?? ??? ??? ??? ?p3=p3->next; ?? ??? ??? ?} ?? ??? ?} ?? ??? ?return; ?? ?} ?? ?if(k==1)?? ??? ?/*再次創(chuàng)建鏈表(相當(dāng)于在上一次創(chuàng)建的鏈表的尾部插入)*/? ?? ?{ ?? ??? ?j=0; ?? ??? ?STU *p1,*p2,*p5; ?? ??? ?p1=&head; ?? ??? ?while(1) ?? ??? ?{ ?? ??? ??? ?if(p1->next==NULL)break;?? ??? ?/*當(dāng)鏈表循環(huán)至尾部時(shí)結(jié)束循環(huán)*/? ?? ??? ??? ?p1=p1->next;?? ??? ?/*p1指向下一個(gè)結(jié)點(diǎn)*/? ?? ??? ?} ?? ??? ?p5=&head; ?? ??? ?while(1) ?? ??? ?{ ?? ??? ??? ?if(p5->next==NULL)break;?? ??? ?/*當(dāng)鏈表循環(huán)至尾部時(shí)結(jié)束循環(huán)*/? ?? ??? ??? ?p5=p5->next;?? ??? ?/*p1指向下一個(gè)結(jié)點(diǎn)*/? ?? ??? ?} ?? ??? ?printf("請(qǐng)輸入?yún)①惾藬?shù):"); ?? ??? ?scanf("%d",&n); ?? ??? ?for(i=1;i<=n;i++){ ?? ??? ??? ?p2=(STU*)malloc(sizeof(STU));?? ??? ?/*新建立一個(gè)結(jié)點(diǎn)*/ ?? ??? ??? ?if(p2==NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("動(dòng)態(tài)內(nèi)存分配失??!"); ?? ??? ??? ??? ?return; ?? ??? ??? ?} ?? ??? ??? ?printf("項(xiàng)目 性別 姓名 學(xué)院 成績(jī)\n"); ?? ??? ??? ?scanf("%s%s%s%s%f",p2->sport,p2->sex,p2->name,p2->college,&p2->grade); ?? ??? ??? ?p2->rank=0; ?? ??? ??? ?grade1[j]=p2->grade; ?? ??? ??? ?j++; ?? ??? ??? ?p2->next=p1->next;?? ??? ?/*將p1所指結(jié)點(diǎn)的next賦給新的結(jié)點(diǎn)的next*/? ?? ??? ??? ?p1->next=p2;?? ??? ??? ?/*將新的結(jié)點(diǎn)的地址賦給p1所指結(jié)點(diǎn)的next*/? ?? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*初始化palce,grade2和grade1*/? ?? ??? ??? ?{ ?? ??? ??? ??? ?place[i]=0; ?? ??? ??? ??? ?grade2[i]=0; ?? ??? ??? ?} ?? ??? ??? ?a=0; ?? ??? ??? ?b=0; ?? ??? ??? ?c=0; ?? ??? ??? ?if(strcmp(p2->sport,sport4)==0||strcmp(p2->sport,sport5)==0||strcmp(p2->sport,sport6)==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*初始化palce,grade2和grade1*/? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?place[i]=0; ?? ??? ??? ??? ??? ?grade2[i]=0; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?grade2[i]=grade1[i]; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(a=0;a<j-1;a++)?? ??? ?/*利用冒泡法進(jìn)行排序*/ ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(b=0;b<j-a-1;b++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if(grade2[b]<grade2[b+1]) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?c=grade2[b];?? ??? ?/*交換數(shù)據(jù)*/ ?? ??? ??? ??? ??? ??? ??? ?grade2[b]=grade2[b+1]; ?? ??? ??? ??? ??? ??? ??? ?grade2[b+1]=c; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*比較,找到所對(duì)應(yīng)的排名*/ ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(a=0;a<j;a++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if(grade2[i]==grade1[a]) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?place[a]=i+1; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?p3=p5; ?? ??? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?p3=p3->next; ?? ??? ??? ??? ??? ?p3->rank=place[i]; ?? ??? ??? ??? ??? ? ?? ??? ??? ??? ?} ?? ??? ??? ?}else{ ?? ??? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*初始化palce,grade2和grade1*/? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?place[i]=0; ?? ??? ??? ??? ??? ?grade2[i]=0; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?grade2[i]=grade1[i]; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(a=0;a<j-1;a++)?? ??? ?/*利用冒泡法進(jìn)行排序*/ ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(b=0;b<j-a-1;b++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if(grade2[b]<grade2[b+1]) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?c=grade2[b];?? ??? ?/*交換數(shù)據(jù)*/ ?? ??? ??? ??? ??? ??? ??? ?grade2[b]=grade2[b+1]; ?? ??? ??? ??? ??? ??? ??? ?grade2[b+1]=c; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?for(i=0;i<j;i++)?? ??? ?/*比較,找到所對(duì)應(yīng)的排名*/ ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?for(a=0;a<j;a++) ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?if(grade2[i]==grade1[a]) ?? ??? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ??? ?place[a]=i+1; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?p3=p5; ?? ??? ??? ??? ?for(i=0;i<j;i++) ?? ??? ??? ??? ?{?? ? ?? ??? ??? ??? ??? ?p3=p3->next; ?? ??? ??? ??? ??? ?p3->rank=place[i]; ?? ??? ??? ??? ??? ?? ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?}?? ??? ? ?? ??? ?return; ?? ?} } /*函數(shù)功能:輸出所有項(xiàng)目信息*/? void printall() { ?? ?STU *p; ?? ?if(head.next==NULL) ?? ?{ ?? ??? ?printf("未創(chuàng)建學(xué)生鏈表!\n"); ?? ??? ?return; ?? ?} ?? ?p=head.next;?? ??? ?/*p指向第一個(gè)結(jié)點(diǎn)*/? ?? ?printf("-------------------------------------\n"); ?? ?printf("項(xiàng)目\t性別\t姓名\t學(xué)院\t成績(jī)\t名次\n"); ?? ?while(p!=NULL)?? ??? ?/*當(dāng)p不為NULL*/? ?? ?{ ?? ??? ?printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p->sport,p->sex,p->name,p->college,p->grade,p->rank); ?? ??? ?p=p->next;?? ??? ?/*p指向下一個(gè)結(jié)點(diǎn)*/? ?? ?} ?? ?return; } /*函數(shù)功能:查詢(xún)個(gè)人的比賽成績(jī)*/? void findperson() { ?? ?int tatal,goal; ?? ?char name1[10]; ?? ?printf("*請(qǐng)輸入查詢(xún)的運(yùn)動(dòng)員姓名:"); ?? ?scanf("%s",&name1); ?? ?printf("--------------------------------------------\n"); ?? ?printf("項(xiàng)目\t性別\t姓名\t學(xué)院\t名次\t成績(jī)\t得分\n"); ?? ?STU *p3; ?? ?p3=head.next;?? ??? ?/*p3指向第一個(gè)結(jié)點(diǎn)*/? ?? ?while(p3!=NULL)?? ??? ?/*當(dāng)p3不為NULL*/ ?? ?{ ?? ??? ? ?? ??? ?if(strcmp(p3->name,name1)==0) ?? ??? ?{ ?? ??? ??? ?goal=getscore(p3->rank);?? ??? ?/*調(diào)用getscore函數(shù)換算出名次所對(duì)應(yīng)的分?jǐn)?shù)*/? ?? ??? ??? ?printf("%s\t%s\t%s\t%s\t%.2f\t%d\t%d\n",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal); ?? ??? ??? ?tatal+=goal; ?? ??? ?}?? ? ?? ??? ?p3=p3->next;?? ??? ?/*p3指向下一個(gè)結(jié)點(diǎn)*/? ?? ??? ? ?? ?}? ?? ?printf("總分:%d\n",tatal); ?? ?return; ?? ? } /*函數(shù)功能:釋放鏈表中所有存放運(yùn)動(dòng)項(xiàng)目信息的結(jié)點(diǎn)*/? void freelist() { ?? ?STU *p; ?? ?p=head.next;?? ??? ??? ?/*從第一個(gè)結(jié)點(diǎn)開(kāi)始釋放*/? ?? ?while(p!=NULL)?? ??? ??? ?/*循環(huán)釋放鏈表中每個(gè)結(jié)點(diǎn)的空間*/ ?? ?{ ?? ??? ?head.next=p->next; ?? ??? ?free(p);?? ??? ??? ?/*釋放p指向的結(jié)點(diǎn)空間*/? ?? ??? ?p=head.next;?? ??? ?/*指針變量p指向下一個(gè)待釋放的結(jié)點(diǎn)*/? ?? ?} ?? ?return; } /*函數(shù)功能:查詢(xún)學(xué)院比賽信息*/ void findcollege() { ?? ?STU *p4; ?? ?p4=head.next;?? ??? ?/*p4指向第一個(gè)結(jié)點(diǎn)*/ ?? ?char college1[10]; ?? ?printf("*請(qǐng)輸入查詢(xún)的學(xué)院:"); ?? ?scanf("%s",&college1); ?? ?printf("-------------------------------------\n"); ?? ?printf("項(xiàng)目\t性別\t姓名\t學(xué)院\t成績(jī)\t名次\n"); ?? ?while(p4!=NULL) ?? ?{ ?? ??? ?if(strcmp(p4->college,college1)==0)?? ??? ?/*如果相等,輸出鏈表*/? ?? ??? ?{ ?? ??? ??? ?printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p4->sport,p4->sex,p4->name,p4->college,p4->grade,p4->rank); ?? ??? ?} ?? ??? ?p4=p4->next;?? ??? ?/*p4指向下一個(gè)結(jié)點(diǎn)*/ ?? ?} ?? ?return; } /*函數(shù)功能:得分計(jì)算*/ int getscore(score1) { ?? ?int n=0; ?? ?if(score1==1) ?? ?{ ?? ??? ?n=7; ?? ??? ?return n;? ?? ?}else if(score1==2) ?? ?{ ?? ??? ?n=5; ?? ??? ?return n; ?? ?}else if(score1==3) ?? ?{ ?? ??? ?n=3; ?? ??? ?return n; ?? ?}else if(score1==4) ?? ?{ ?? ??? ?n=2; ?? ??? ?return n; ?? ?}else if(score1==5) ?? ?{ ?? ??? ?n=1; ?? ??? ?return n; ?? ?}else ?? ?{ ?? ??? ?n=0; ?? ??? ?return n; ?? ?} ?? ?return; } /*函數(shù)信息:查看學(xué)院獲獎(jiǎng)信息*/ void findcollogescore() { ?? ?int tatal,goal; ?? ?char name1[20]; ?? ?printf("*請(qǐng)輸入查詢(xún)的學(xué)院:"); ?? ?scanf("%s",&name1); ?? ?printf("--------------------------------------------\n"); ?? ?printf("項(xiàng)目\t性別\t姓名\t學(xué)院\t成績(jī)\t名次\t得分\n"); ?? ?STU *p3; ?? ?p3=head.next;?? ??? ?/*p3指向第一個(gè)結(jié)點(diǎn)*/? ?? ?while(p3!=NULL) ?? ?{ ?? ??? ? ?? ??? ?if(strcmp(p3->college,name1)==0)?? ??? ?/*如果相等,輸出鏈表*/ ?? ??? ?{ ?? ??? ??? ?goal=getscore(p3->rank); ?? ??? ??? ?printf("%s\t%s\t%s\t%s\t%.2f\t%d\t%d\n",p3->sport,p3->sex,p3->name,p3->college,p3->grade,p3->rank,goal); ?? ??? ??? ?tatal+=goal; ?? ??? ?}?? ? ?? ??? ?p3=p3->next;?? ??? ?/*p3指向下一個(gè)結(jié)點(diǎn)*/ ?? ??? ? ?? ?}? ?? ?printf("總分:%d\n",tatal); ?? ?return; ?? ? } /*函數(shù)功能:生成團(tuán)體團(tuán)體總分報(bào)表*/? void allscore() { ?? ?int tatal[60],goal=0,i,man[60],women[60],pla[60],data[60],tatal2[60],man2[60],women2[60]; ?? ?STU *p3; ?? ? ?? ?char ma[10]={"男"}; ?? ?char wo[10]={"女"};? ?? ?printf("-------------------------------------\n"); ?? ?printf("院系\t男子\t女子\t總分\t排名\n"); ?? ?for(i=0;i<N;i++) ?? ?{ ?? ??? ?p3=head.next;?? ??? ?/*p3指向第一個(gè)結(jié)點(diǎn)*/ ?? ??? ?tatal[i]=0; ?? ??? ?man[i]=0; ?? ??? ?women[i]=0; ?? ??? ?while(p3!=NULL) ?? ??? ?{ ?? ??? ??? ?if(strcmp(p3->college,stu[i])==0&&strcmp(p3->sex,ma)==0)?? ??? ?/*判斷是否為同一男子項(xiàng)目*/? ?? ??? ??? ?{ ?? ??? ??? ??? ?goal=getscore(p3->rank); ?? ??? ??? ??? ?man[i]+=goal;?? ??? ?/*計(jì)算男子總分*/ ?? ??? ??? ?} ?? ??? ??? ?if(strcmp(p3->college,stu[i])==0&&strcmp(p3->sex,wo)==0)?? ??? ?/*判斷是否為同一女子項(xiàng)目*/? ?? ??? ??? ?{ ?? ??? ??? ??? ?goal=getscore(p3->rank); ?? ??? ??? ??? ?women[i]+=goal;?? ??? ?/*計(jì)算女子總分*/ ?? ??? ??? ?} ?? ??? ??? ?p3=p3->next;?? ??? ?/*p3指向下一個(gè)結(jié)點(diǎn)*/ ?? ??? ?} ?? ??? ?tatal[i]=man[i]+women[i];?? ??? ?/*計(jì)算總分*/? ?? ?} ?? ?for(i=0;i<N;i++) ?? ?{ ?? ??? ??? ?data[i]=tatal[i]; ?? ?} ?? ?int a,b,c; ?? ?for(a=0;a<N-1;a++)?? ??? ?/*利用冒泡法進(jìn)行排序*/? ?? ?{ ?? ??? ?for(b=0;b<N-a-1;b++) ?? ??? ?{ ?? ??? ??? ?if(data[b]<data[b+1]) ?? ??? ??? ?{ ?? ??? ??? ??? ?c=data[b];?? ??? ?/*交換數(shù)據(jù)*/? ?? ??? ??? ??? ?data[b]=data[b+1]; ?? ??? ??? ??? ?data[b+1]=c; ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?for(i=0;i<N;i++){?? ??? ?/*初始化pla*/? ?? ??? ?pla[i]=0; ?? ??? ?? ?? ?} ?? ?for(i=0;i<N;i++)?? ??? ?/*比較,找到所對(duì)應(yīng)的排名*/? ?? ?{ ?? ??? ?for(a=0;a<N;a++) ?? ??? ?{ ?? ??? ??? ?if(data[i]==tatal[a]) ?? ??? ??? ?{ ?? ??? ??? ??? ?pla[a]=i+1; ?? ??? ??? ?}? ?? ??? ?} ?? ?} ?? ?int p; ?? ? ?? ?for(p=0;p<N;p++) ?? ?{ ?? ??? ?p3=head.next;?? ??? ?/*p3指向第一個(gè)結(jié)點(diǎn)*/ ?? ??? ?man2[p]=0; ?? ??? ?women2[p]=0; ?? ??? ?while(p3!=NULL) ?? ??? ?{ ?? ??? ??? ?if(strcmp(p3->college,stu[p])==0&&strcmp(p3->sex,ma)==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?goal=getscore(p3->rank); ?? ??? ??? ??? ?man2[p]+=goal; ?? ??? ??? ?} ?? ??? ??? ?if(strcmp(p3->college,stu[p])==0&&strcmp(p3->sex,wo)==0) ?? ??? ??? ?{ ?? ??? ??? ??? ?goal=getscore(p3->rank); ?? ??? ??? ??? ? ?? ??? ??? ??? ?women2[p]+=goal; ?? ??? ??? ?} ?? ??? ??? ?p3=p3->next;?? ??? ?/*p3指向下一個(gè)結(jié)點(diǎn)*/ ?? ??? ?} ?? ??? ?tatal2[p]=man2[p]+women2[p]; ?? ??? ?printf("%s\t%d\t%d\t%d\t%d\n",stu[p],man2[p],women2[p],tatal2[p],pla[p]); ?? ?} ?? ?return; ?? ? } /*函數(shù)功能:查看各項(xiàng)目獲獎(jiǎng)運(yùn)動(dòng)員*/ ?void getprize() ?{ ??? ?STU *p; ??? ?int i,j; ?? ? p=&head; ?? ? printf("-------------------------------------\n"); ?? ? printf("各項(xiàng)目前三名信息如下:\n") ; ?? ? printf("項(xiàng)目\t性別\t姓名\t學(xué)院\t成績(jī)\t名次\n"); ?? ? while(p!=NULL) ?? ? { ?? ? ?? ?if((p->rank)>=1&&(p->rank)<=3)?? ??? ?/*選取各項(xiàng)目排名前三的運(yùn)動(dòng)員*/ ?? ? ?? ?{ ?? ? ?? ??? ?printf("%s\t%s\t%s\t%s\t%.2f\t%d\n",p->sport,p->sex,p->name,p->college,p->grade,p->rank); ?? ? ?? ?} ?? ? ?? ?p=p->next; ?? ? }? ?? ? return; ?} ?/*函數(shù)功能:在鏈表中修改指定的項(xiàng)目信息*/ ?void modify() ?{ ??? ?int n,i; ??? ?char sport1[20],sex1[10],name1[10],college1[20]; ??? ?STU *p,*p1; ??? ?p=head.next;?? ??? ?/*p指向第一個(gè)結(jié)點(diǎn)*/ ??? ?printf("請(qǐng)輸入要修改位置的相關(guān)信息:\n"); ??? ?printf("項(xiàng)目 性別 姓名 學(xué)院\n");? ??? ?scanf("%s%s%s%s",&sport1,&sex1,&name1,&college1); ??? ?if(head.next==NULL) ??? ?{ ??? ??? ?printf("未創(chuàng)建項(xiàng)目鏈表!"); ?? ??? ? return;? ??? ?} ??? ?while(p!=NULL) ??? ?{ ??? ??? ?if(strcmp(p->sport,sport1)==0&&strcmp(p->sex,sex1)==0&&strcmp(p->name,name1)==0&&strcmp(p->college,college1)==0) ??? ??? ?{ ??? ??? ??? ?p1=p; ??? ??? ??? ?break; ??? ??? ?} ??? ??? ?p=p->next;?? ??? ?/*p指向下一個(gè)結(jié)點(diǎn)*/ ??? ?} ??? ?char sport2[10]="項(xiàng)目",sex2[10]="性別",name2[10]="姓名",college2[10]="學(xué)院",grade2[10]="成績(jī)",rank2[10]="名次"; ??? ?char xiugai[10]; ??? ?printf("請(qǐng)輸入要修改的信息:"); ??? ?scanf("%s",&xiugai);? ??? ?if(xiugai[1]==sport2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%s",p1->sport);? ??? ??? ?printf("修改成功!") ;? ??? ?}else if(xiugai[1]==sex2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%s",p1->sex);? ??? ??? ?printf("修改成功!") ;? ??? ?}else if(xiugai[1]==name2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%s",p1->name);? ??? ??? ?printf("修改成功!") ;? ??? ?}else if(xiugai[1]==college2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%s",p1->college);? ??? ??? ?printf("修改成功!") ;? ??? ?}else if(xiugai[1]==grade2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%f",p1->grade);? ??? ??? ?printf("修改成功!") ; ??? ?}else if(xiugai[1]==rank2[1]) ??? ?{ ??? ??? ?printf("請(qǐng)輸入修改后的內(nèi)容:") ; ??? ??? ?scanf("%d",&p1->rank);? ??? ??? ?printf("修改成功!") ; ??? ?} ??? ?return; }
具體實(shí)現(xiàn)如下:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言中字符的輸入輸出以及計(jì)算字符個(gè)數(shù)的方法詳解
這篇文章主要介紹了C語(yǔ)言中字符的輸入輸出以及計(jì)算字符個(gè)數(shù)的方法,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-11-11C語(yǔ)言對(duì)于volatile與gcc優(yōu)化的探究
這篇文章主要介紹了C語(yǔ)言對(duì)于volatile與gcc優(yōu)化的探究,volatile是一個(gè)特征修飾符(type specifier) volatile的作用是作為指令關(guān)鍵字,確保本條指令不會(huì)因編譯器的優(yōu)化而省略,且要求每次直接讀值。這是百度百科的介紹,那編譯器是具體是怎么優(yōu)化的呢2023-02-02C++11中std::function與std::bind的用法實(shí)例
大家都知道C++11中增加了許多的新特性,下面這篇文章主要給大家介紹了關(guān)于C++11中std::function與std::bind的用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05C++標(biāo)準(zhǔn)之(ravalue reference) 右值引用介紹
臨時(shí)對(duì)象的產(chǎn)生和拷貝所帶來(lái)的效率折損,一直是C++所為人詬病的問(wèn)題,下面簡(jiǎn)單地介紹一下Copy Elision、RVO,對(duì)此不感興趣的可以直接跳過(guò)2012-11-11