日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#include

#include

#include

#include

#include

#include

void pause();

typedef struct STUDENT

{

char studentNumber[20]; //學生學號

char studentName[20]; //學生姓名

char className[20]; //班級名稱

float chinese; //語文績

float maths; //數學成績

float english; //外語成績

float total;

float average; //平均值

struct STUDENT *next; //指向下個數據

struct STUDENT *last; //指向上個

}STUDENT;

static STUDENT *first=NULL; //鏈表頭

static STUDENT *end=NULL;

STUDENT *Malloc(void)

{

STUDENT *p;

p=(STUDENT*)malloc(sizeof(STUDENT));

if(p==NULL)

return NULL;

memset(p->studentNumber,' ',20);

memset(p->studentName,' ',20);

memset(p->className,' ',20);

p->chinese=0。

0;

p->maths=0。0;

p->english=0。0;

p->total=0。0;

p->average=0。0;

p->next=NULL;

p->last=NULL;

return p;

}

void Insert(STUDENT *t) //鏈表插入

{

STUDENT *p;

if (first==NULL)

first=t;

else

{ p=first;

while (p->next)

p=p->next;

p->next=t;

t->last=p;

end=t;

}

}

void loaddatabase() //加載數據

{

FILE *fp;

STUDENT *p;

fp=fopen("student。

txt","r");

if(!fp)

{

printf("打開文件出錯

");

pause();

return;

}

p=Malloc();

//first=p;

while(fscanf(fp,"%s%s%s%f%f%f%f%f",

p->studentNumber,p->studentName,p->className,

&(p->chinese),&(p->maths),&(p->english),&(p->total),&(p->average))>0)

{

Insert(p);

p=Malloc();

}

fclose(fp);

printf(" 歡迎使用學生成績管理系統

");

printf("

數據加載成功

");

system("pause");

system("cls");

}

void savedata() //保存數據

{

FILE *fp;

STUDENT *p;

if (first==NULL )

{

printf("沒有學生記錄

");

pause();

//return;

}

fp=fopen("student。

txt","w ");

if(!fp)

{

printf("打開文件出錯

");

pause();

return;

}

p=first;

while(p)

{

fprintf(fp,"%s %s %s %f %f %f %f %f

",p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

p=p->next;

}

fclose(fp);

printf("數據保存成功

");

}

void add() //添加記錄

{

STUDENT *p;

STUDENT *newstudent=Malloc();

printf("請輸入學號:");

scanf("%s",newstudent->studentNumber);

printf("請輸入姓名:");

scanf("%s",newstudent->studentName);

printf("請輸入班級名稱:");

scanf("%s",newstudent->className);

printf("請輸入語文成績:");

scanf("%f",&newstudent->chinese);

printf("請輸入數學成績:");

scanf("%f",&newstudent->maths);

printf("請輸入外語成績:");

scanf("%f",&newstudent->english);

newstudent->total=newstudent->chinese newstudent->maths newstudent->english;

newstudent->average=(newstudent->total)/3;

Insert(newstudent);

}

void pause()

{

system("pause");

system("cls");

}

void printall() //打印全部記錄

{

STUDENT *p;

p=first;

printf("

");

printf("學號姓名班級語文數學外語總分平均分

");

while (p)

{

printf("%s%s%s%3。

1f%3。1f%3。1f%3。1f%3。1f

",p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

p=p->next;

}

printf("

");

}

void findbyname() //按姓名查詢

{ int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("請輸入學生姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

break;

}

p=p->next;

}

if (i==0)

printf("sorry,沒找到改學生記錄

");

}

void findbynumber() //按學號查詢

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("請輸入學生學號:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

}

p=p->next;

}

if (i==0)

printf("sorry,沒找到改學生記錄

");

}

void findbyclass() //按班級名查詢

{ int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("請輸入班級名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->className,buf)==0)

{ printf("%s %s %s %3。

1f %3。1f %3。1f %3。1f %3。1f

",

p->studentNumber,p->studentName,p->className,

p->chinese,p->maths,p->english,p->total,p->average);

i ;

}

p=p->next;

}

if (i==0)

printf("sorry,沒找到改學生記錄

");

}

int collect(){ //統計分數

int totalstudentnum=0;

double totalch=0。

0,totalmh=0。0,totalen=0。0;

double totalscore=0。0;

STUDENT *p;

p=first;

while (p)

{

totalscore=totalscore p->total;

totalch=totalch p->chinese;

totalmh=totalmh p->maths;

totalen=totalen p->english;

totalstudentnum ;

p=p->next;

}

printf("人數:%d 整體總分:%。

1f 整體平均分:%。1f

",

totalstudentnum,totalscore,(totalscore/totalstudentnum));

printf("語文:%。

1f 數學:%。1f 外語:%。1f

",totalch,totalmh,totalen);

printf("語文平均分:%。1f 數學平均分:%。1f 外語平均分:%。1f

",

(totalch/totalstudentnum),(totalmh/totalstudentnum),(totalen/totalstudentnum));

}

int delbyname()

{ int i=0;

STUDENT *p,*pnext,*pbuf,*plast;

char buf[20];

p=first;

printf("請輸入需刪除人員的姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{

i ;

if (first==p)

{

pbuf=first;

if (first->next==NULL) end=NULL;

first=first->next;

if (first) first->last=NULL;

free(pbuf);

printf("刪除成功

");

return 0;

}

plast->next=p->next;

if (p->next=NULL) end=p->last;

free(p);

printf("刪除成功

");

}

plast=p;

p=p->next;

}

if (i==0)

printf("sorry,沒找到該學生記錄

");

}

int delbynumber()

{ int i=0;

STUDENT *p,*pnext,*pbuf,*plast;

char buf[20];

p=first;

printf("請輸入需刪除人員的學號:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{

i ;

if (first==p)

{

pbuf=first;

if (first->next==NULL) end=NULL;

first=first->next;

//first->last=NULL;

if (first) first->last=NULL;

free(pbuf);

printf("刪除成功

");

return 0;

}

plast->next=p->next;

if (p->next=NULL) end=p->last;

free(p);

printf("刪除成功

");

}

plast=p;

p=p->next;

}

if (i==0)

printf("sorry,沒找到該學生記錄

");

}

void changebynumber()

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("請輸入需修改人員的學號:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentNumber,buf)==0)

{

printf("請輸入學號:");

scanf("%s",p->studentNumber);

printf("請輸入姓名:");

scanf("%s",p->studentName);

printf("請輸入班級名稱:");

scanf("%s",p->className);

printf("請輸入語文成績:");

scanf("%f",&p->chinese);

printf("請輸入數學成績:");

scanf("%f",&p->maths);

printf("請輸入外語成績:");

scanf("%f",&p->english);

p->total=p->chinese p->maths p->english;

p->average=(p->total)/3;

printf("修改成功");

i ;

return;

}

p=p->next;

}

if (i==0)

printf("sorry,沒找到改學生記錄

");

}

void changebyname()

{

int i=0;

STUDENT *p;

char buf[20];

p=first;

printf("請輸入需修改人員的姓名:");

scanf("%s",buf);

while (p)

{

if (strcmp(p->studentName,buf)==0)

{

printf("請輸入學號:");

scanf("%s",p->studentNumber);

printf("請輸入姓名:");

scanf("%s",p->studentName);

printf("請輸入班級名稱:");

scanf("%s",p->className);

printf("請輸入語文成績:");

scanf("%f",&p->chinese);

printf("請輸入數學成績:");

scanf("%f",&p->maths);

printf("請輸入外語成績:");

scanf("%f",&p->english);

p->total=p->chinese p->maths p->english;

p->average=(p->total)/3;

printf("修改成功

");

i ;

return;

}

p=p->next;

}

if (i==0)

printf("sorry,沒找到改學生記錄

");

}

void sortbychinese() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// printf("外層 %f

",p1->chinese);

// printall();

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next;p=p->next,p2=p2->next) //p指向P2后面一個數據

{

// printf("調整之前p=%f p2=%f

",p->chinese,p2->chinese);

if ((p->chinese)-(p2->chinese)>0)

{

//printf("1

");

plast=p2->last; //保存前節點

pnext=p->next; //保存后節點

if (plast) plast->next=p; //前節點接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后節點接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外層指針校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //節點交換

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

//printf ("5

");

// printf("調整之后p=%f p2=%f

",p->chinese,p2->chinese);

}

}

}

//printall();

}

void sortbymaths() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一個數據

{

if ((p->maths)-(p2->maths)>0)

{

//printf("1

");

plast=p2->last; //保存前節點

pnext=p->next; //保存后節點

if (plast) plast->next=p; //前節點接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后節點接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外層指針校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //節點交換

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

// printf ("5

");

}

}

}

//printall();

}

void sortbyenglish() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一個數據

{

if ((p->english)-(p2->english)>0)

{

//printf("1

");

plast=p2->last; //保存前節點

pnext=p->next; //保存后節點

if (plast) plast->next=p; //前節點接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后節點接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外層指針校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //節點交換

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

// printall();

// printf ("5

");

}

}

}

}

void sortbytotal() //排序

{

STUDENT *p,*p1,*p2,*plast=NULL,*pnext=NULL;

for(p1=end->last;p1;p1=p1->last)

{

// if (p1->next==NULL) p1=p1->last;

for(p2=first,p=first->next;p2!=p1->next && p;p=p->next,p2=p2->next) //p指向P2后面一個數據

{

if ((p->total)-(p2->total)>0)

{

// printf("1

");

plast=p2->last; //保存前節點

pnext=p->next; //保存后節點

if (plast) plast->next=p; //前節點接后面

else

{ first=p;

p->last=NULL;}

if (pnext) pnext->last=p2; //后節點接前面

else

{end=p2;

p2->next=NULL;

}

if (p1==p) p1=p2; //外層指針校正

else if (p1==p2)

p1=p;

// printf("2

");

p->next=p2; //節點交換

p2->last=p;

p2->next=pnext;

// printf("3

");

p->last=plast;

// printf("4

");

// else

//p->last=NULL;

p2=p;

p=p2->next;

//if (p==NULL) break;

//printf("3

");

//if (p->last==first) break;

//printall();

// printf ("5

");

}

}

}

}

void exit_free()

{

STUDENT *p,*p1;

p=first;

while (p)

{

p1=p;

free(p1);

p=p->next;

}

}

void ver()

{

system("cls");

printf("

");

printf(" 學生成績管理系統 v1。

0");

printf("

");

printf("作者 風中的紙屑

");

}

int menu(void)

{

int choose;

//system("cls");

printf("

");

printf(" 1: 顯示所有學生的信息 |");

printf(" 2: 按姓名查詢 |

");

printf(" 3: 按學號查詢 |");

printf(" 4: 按班級查詢 |

");

printf(" 5: 通過姓名刪除學生 | ");

printf(" 6:按學號刪除學生 |

");

printf(" 7: 按學號修改學生成績 |");

printf(" 8: 按姓名修改學生成績 |

");

printf(" 9: 添加 |");

printf(" 10: 語文排序 |

");

printf(" 11: 數學排序 |");

printf(" 12: 外語排序 |

");

printf(" 13: 總分排序 |");

printf(" 14:匯總 |

");

printf(" 15:保存所有學生信息 |");

printf(" 16:清屏 |

");

printf(" 17: 版本 |");

printf(" 18: 退出 |

");

printf("

");

printf(" ");

printf(" 請輸入對應數字:");

scanf("%d",&choose);/*取得用戶的選擇*/

switch(choose)

{

case 1:

system("cls");

printall();/*顯示所有學生的信息*/

printf("

");

collect();

break;

case 2:

findbyname();

break;

case 3:

findbynumber();/*根據用戶輸入的學號顯示該學生的信息*/

break;

case 4:

findbyclass();

break;

case 5:

printall();

delbyname();

break;

case 6:

printall();

delbynumber();

break;

case 7:

printall();

changebynumber();/*根據用戶輸入的學號修改學生成績*/

break;

case 8:

printall();

changebyname();/*保存數據*/

break;

case 9:

add();

break;

case 10:

system("cls");

sortbychinese();

printall();

break;

case 11:

system("cls");

sortbymaths();

printall();

break;

case 12:

system("cls");

sortbyenglish();

printall();

break;

case 13:

system("cls");

sortbytotal();

//sortbytotal();

printall();

break;

case 14:

collect();

break;

case 15:

savedata();

break;

case 16:

system("cls");

break;

case 17:

system("cls");

ver();

break;

case 18:

exit_free();

exit(1);

break;

default: system("cls"); break;

}

}

int main()

{

loaddatabase();

while (1)

menu();

}

這是我以前寫得,基本符合樓主要求,貼上來了。

全部

總結

以上是生活随笔為你收集整理的c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。