#include#include//清屏要用到的頭文件
#include//文件操作要用到的頭文件
#include//字符串比較用到的strcmp的
//定義結(jié)構(gòu)體,來(lái)創(chuàng)建鏈表;
typedef struct Node
{
int ID;
char Name[30];
int Score1,Score2,Score3,sum;
double average;
struct Node* next; //指針域;
} node;
node list;
int Read_FILE(node* L); //讀文件;
int Save_FILE(node* L); //保存文件;
void Catalogue(); //目錄的函數(shù);
void Add_Printf(); //增加學(xué)生信息界面;
void Add(node* L,node e); //實(shí)現(xiàn)增加信息的功能;
void Delete(node* L); //刪除學(xué)生信息輸出界面;
void dodelete(node* s); //實(shí)現(xiàn)刪除學(xué)生信息;
void Fix(node* L); //修改學(xué)生信息;
void Search(node* L); //查詢學(xué)生信息的輸出界面;
node* Search_id(int id,node* L); //實(shí)現(xiàn)按學(xué)號(hào)查詢學(xué)生信息;
node* Search_in(char name[],node* L); //實(shí)現(xiàn)按姓名查詢學(xué)生信息;
void Printf(node* L); //實(shí)現(xiàn)輸出學(xué)生信息的功能;
void Printf_(); //界面;
void Sort(node* L); //排序;
int cmpbsum(node * L);
int cmpssum(node * L);
int cmps1(node * L);
int cmpb1(node * L);
int cmps2(node * L);
int cmpb2(node * L);
int cmps3(node * L);
int cmpb3(node * L);
int cmpssave(node * L);
int cmpbave(node * L);
void Goodbye(); //退出系統(tǒng);s
int main()
{
int choice=0;
int go;
while(1)
{
Catalogue();
scanf("%d",&choice);
switch(choice)
{
case 1:
Add_Printf();
break;
case 2:
Delete(&list);
break;
case 3:
Fix(&list);
break;
case 4:
Search(&list);
break;
case 5:
Printf(&list);
break;
case 6:
Sort(&list);
break;
case 0:
Goodbye();
break;
}
printf("是否繼續(xù)操作?(用1表示Yes,用0表示No\n)");
scanf("%d",&go);
if(go==0)
{
break;
}
}
return 0;
}
void Catalogue()
{
system("cls"); //清屏;
printf("************************\n");
printf("************************\n");
printf("*****1.增加學(xué)生信息*****\n");
printf("*****2.刪除學(xué)生信息*****\n");
printf("*****3.修改學(xué)生信息*****\n");
printf("*****4.查詢學(xué)生信息*****\n");
printf("*****5.輸出學(xué)生信息*****\n");
printf("*****6.排序?qū)W生信息*****\n");
printf("*****0.退出管理系統(tǒng)*****\n");
printf("************************\n");
printf("************************\n");
printf("\n");
printf("請(qǐng)輸入您想實(shí)現(xiàn)的功能對(duì)應(yīng)的編號(hào):");
}
int Read_FILE(node* L) //讀取文件;
{
FILE* fpRead = fopen("D:\\code\\student\\student_information.txt","r"); //打開(kāi)文件 //r,文件必須存在,只讀
node st; //創(chuàng)建一個(gè)st節(jié)點(diǎn),用來(lái)存放讀出來(lái)的數(shù)據(jù);
node* s; //創(chuàng)建一個(gè)s節(jié)點(diǎn),作用:把數(shù)據(jù)讀出來(lái)后用來(lái)連接的;
node* t = L; //把L表的頭節(jié)點(diǎn)賦值給t; //通過(guò)st存放數(shù)據(jù)再把數(shù)據(jù)傳給s,通過(guò)s插入到t之后,t繼續(xù)遍歷;
if(fpRead == NULL)
{
printf("文件打開(kāi)失??!");
return 0;
}
while(fscanf(fpRead,"%d %s %d %d %d %d %lf ",&st.ID,&st.Name,&st.Score1,&st.Score2,&st.Score3,&st.sum,&st.average)!=EOF)
{
s = (node*)malloc(sizeof(node)); //申請(qǐng)內(nèi)存;
*s = st;
//尾插法;
t->next = s;
t = s;
t->next = NULL;
}
fclose(fpRead);
return 1;
}
int Save_FILE(node* L) //保存文件;
{
FILE* fpWrite = fopen("D:\\code\\student\\student_information.txt","w+"); //w+s,文件存在截?cái)酁?;不存在就創(chuàng)建;
if(fpWrite == NULL)
{
printf("文件打開(kāi)失??!");
return 0;
}
node* p = L->next;
while(p != NULL)
{
fprintf(fpWrite,"%d %s %d %d %d %d %lf\n",p->ID,p->Name,p->Score1,p->Score2,p->Score3,p->sum,p->average);
p = p->next;
}
fclose(fpWrite);
return 1;
}
void Add_Printf() //增加學(xué)生信息的輸出界面;
{
system("cls");
node st;
printf("請(qǐng)輸入學(xué)生的信息。\n");
printf("請(qǐng)輸入學(xué)生學(xué)號(hào):\n");
scanf("%d",&st.ID);
printf("請(qǐng)輸入學(xué)生姓名:\n");
scanf("%s",&st.Name);
printf("請(qǐng)輸入學(xué)生的高數(shù)成績(jī):\n");
scanf("%d",&st.Score1);
printf("請(qǐng)輸入學(xué)生的思修成績(jī):\n");
scanf("%d",&st.Score2);
printf("請(qǐng)輸入學(xué)生的專(zhuān)業(yè)課成績(jī):\n");
scanf("%d",&st.Score3);
Add(&list,st);
}
void Add(node* L,node e) //實(shí)現(xiàn)增加學(xué)生信息的功能;
{
//頭插法;
node* p = L;
node* s = (node*)malloc(sizeof(node));
*s = e;
s->next = p->next;
p->next = s;
s->sum = s->Score1 + s->Score2 + s->Score3;
s->average = (double)(s->Score1 + s->Score2 + s->Score3)/3.0;
Save_FILE(L); //增加之后要保存呀;
}
node* Search_id(int id,node* L) //實(shí)現(xiàn)按學(xué)號(hào)查詢學(xué)生信息;
{
node* p = L;
while(p->next != NULL)
{
if(p->next->ID == id)
{
return p;
}
p = p->next;
}
return p->next;
}
node* Search_in(char name[],node* L) //實(shí)現(xiàn)按姓名查詢學(xué)生信息;
{
node* p = L;
while(p->next != NULL)
{
if(strcmp(name,p->next->Name) == 0) //strcmp(str1,str2) 若str1 str2相等,則返回0;
{
return p;
}
p = p->next;
}
return p->next;
}
void Search(node* L) //查找學(xué)生信息的輸出界面;
{
system("cls");
int choice = 0;
printf("如按學(xué)號(hào)查找請(qǐng)輸入‘1’ \n");
printf("如按姓名查找請(qǐng)輸入‘0’ \n");
scanf("%d",&choice);
int id;
char name[30];
node* st;
if(choice == 1)
{
printf("請(qǐng)輸入待查詢的學(xué)號(hào):\n");
scanf("%d",&id);
st = Search_id(id,L);
if(st == NULL)
{
printf("系統(tǒng)中并無(wú)此人!\n");
}
else
{
st = st->next;
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|總分\t|平均分\t|\n");
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
printf("——————————————————————————————————————————\n");
}
}
else
{
printf("請(qǐng)輸入待查詢的姓名:\n");
scanf("%s",name);
st = Search_in(name,L);
if(st == NULL)
{
printf("系統(tǒng)中并無(wú)此人!\n");
}
else
{
st=st->next;
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|總分\t|平均分\t|\n");
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
printf("——————————————————————————————————————————\n");
}
}
}
void Delete(node* L) //刪除學(xué)生信息的輸出界面;
{
system("cls");
int id;
node* p;
printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):\n");
scanf("%d",&id);
node* st = Search_id(id,L);
p = st;
if(st == NULL)
{
printf("系統(tǒng)中并無(wú)此人!\n");
return 0;
}
st =st->next;
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|總分\t|平均分\t|\n");
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
printf("——————————————————————————————————————————\n");
dodelete(p);
printf("刪除成功!");
Save_FILE(L); //保存;
}
void dodelete(node* s) //實(shí)現(xiàn)刪除學(xué)生信息;
{
node* t = s->next;
s->next = t->next;
t->next = NULL;
free(t); //釋放 防止成為野指針;
}
void Fix(node* L)
{
system("cls");
int id;
printf("請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào):\n");
scanf("%d",&id);
node* st = Search_id(id,L);
if(st == NULL)
{
printf("系統(tǒng)中并無(wú)此人!\n");
return 0;
}
st = st->next;
int choice = 0;
while(1)
{
system("cls");
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|總分\t|平均分\t|\n");
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3,st->sum,st->average);
printf("——————————————————————————————————————————\n");
printf("1.修改學(xué)生學(xué)號(hào)\n");
printf("2.修改學(xué)生姓名\n");
printf("3.修改學(xué)生高數(shù)成績(jī)\n");
printf("4.修改學(xué)生思修成績(jī)\n");
printf("5.修改學(xué)生專(zhuān)業(yè)課成績(jī)\n");
printf("\n");
printf("請(qǐng)輸入待修改數(shù)據(jù)的編號(hào):\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("請(qǐng)輸入學(xué)號(hào):\n");
scanf("%d",&st->ID);
break;
case 2:
printf("請(qǐng)輸入姓名:\n");
scanf("%s",&st->Name);
break;
case 3:
printf("請(qǐng)輸入高數(shù)成績(jī):\n");
scanf("%d",&st->Score1);
break;
case 4:
printf("請(qǐng)輸入思修成績(jī):\n");
scanf("%d",&st->Score2);
break;
case 5:
printf("請(qǐng)輸入專(zhuān)業(yè)課成績(jī):\n");
scanf("%d",&st->Score3);
break;
}
printf("是否繼續(xù),繼續(xù)請(qǐng)輸入1,否則輸入0\n");
scanf("%d",&choice);
if(choice == 0)
{
Save_FILE(L);
break;
}
}
printf("修改后的信息為:\n");
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|\n");
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",st->ID,st->Name,st->Score1,st->Score2,st->Score3);
printf("——————————————————————————————————————————\n");
Save_FILE(L); //保存;
}
void Printf_() //界面
{
printf("——————————————————————————————————————————\n");
printf("|學(xué)號(hào)\t|姓名\t|高數(shù)\t|思修\t|專(zhuān)業(yè)課\t|總分\t|平均分\t|\n");
printf("——————————————————————————————————————————\n");
}
void Printf(node* L) //功能
{
system("cls");
node* p = L->next;
Printf_();
if(p != NULL)
{
while(p != NULL)
{
printf("%d\t|%s\t|%d\t|%d\t|%d\t|%d\t|%.2lf\t|\n",p->ID,p->Name,p->Score1,p->Score2,p->Score3,p->sum,p->average);
printf("——————————————————————————————————————————\n");
p =p->next;
}
}
}
int cmps1(node * L) //高數(shù)升序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score1 >p->Score1)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpb1(node * L) //高數(shù)降序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score1< p->Score1)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmps2(node * L) //思修升序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score2 >p->Score2)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpb2(node * L) //思修降序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score2< p->Score2)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmps3(node * L) //專(zhuān)業(yè)課升序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score3 >p->Score3)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpb3(node * L) //專(zhuān)業(yè)課降序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->Score3< p->Score3)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpssum(node * L) //總分升序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->sum >p->sum)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpbsum(node * L) //總分降序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
if(q->sum< p->sum)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
return L;
}
int cmpsave(node * L) //平均分升序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->average >p->average)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
int cmpbave(node * L) //平均分降序;
{
int i,count = 0, num;
node *p, *q, *tail;
p = L;
while(p->next != NULL)
{
count++;
p = p->next;
}
for(i = 0; i< count - 1; i++)
{
num = count - i - 1;
q = L->next;
p = q->next;
tail = L;
while(num--)
{
if(q->average< p->average)
{
q->next = p->next;
p->next = q;
tail->next = p;
}
tail = tail->next;
q = tail->next;
p = q->next;
}
}
return L;
}
void Sort(node* L)
{
system("cls");
int choice = 1;
int a=0;
printf("0.按高數(shù)升序排列\(zhòng)n");
printf("1.按高數(shù)降序排列\(zhòng)n");
printf("2.按思修升序排列\(zhòng)n");
printf("3.按思修降序排列\(zhòng)n");
printf("4.按專(zhuān)業(yè)課升序排列\(zhòng)n");
printf("5.按專(zhuān)業(yè)課序排列\(zhòng)n");
printf("6.按三科總分升序排列\(zhòng)n");
printf("7.按三科總分降序排列\(zhòng)n");
printf("8.按平均分升序排列\(zhòng)n");
printf("9.按平均分降序排列\(zhòng)n");
printf("\n");
printf("請(qǐng)輸入想要實(shí)現(xiàn)的功能的數(shù)字編號(hào)\n");
scanf("%d",&a);
switch(a)
{
case 0:
{
cmps1(L);
break;
}
case 1:
{
cmpb1(L);
break;
}
case 2:
{
cmps2(L);
break;
}
case 3:
{
cmpb2(L);
break;
}
case 4:
{
cmps3(L);
break;
}
case 5:
{
cmpb3(L);
break;
}
case 6:
{
cmpssum(L);
break;
}
case 7:
{
cmpbsum(L);
break;
}
case 8:
{
cmpsave(L);
break;
}
case 9:
{
cmpbave(L);
break;
}
}
Printf_(); //界面
Printf(L); //功能
Save_FILE(L); //保存;
}
void Goodbye()
{
system("cls");
printf("已退出系統(tǒng),歡迎您下次使用!\n");
exit(0);
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)題目:C語(yǔ)言—學(xué)生管理系統(tǒng)(鏈表實(shí)現(xiàn),完整代碼)-創(chuàng)新互聯(lián)
本文路徑:http://jinyejixie.com/article22/eihcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開(kāi)發(fā)、標(biāo)簽優(yōu)化、ChatGPT、網(wǎng)站設(shè)計(jì)公司、定制開(kāi)發(fā)、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容