C語言學完了,知識很多,也很瑣碎,學生信息管理系統對我們而言,就是一次機會,一次讓我們將C語言知識融會貫通的機會,通過編程學生信息管理系統,我們運用了循環、指針,結構體,鏈表、函數、文件等知識,也能讓我們更加熟悉了C語言相關知識。話不多說,直接開始。
一、思路學生信息管理系統,說難也難,說簡單也簡單,對于初學者的我們也算一項不小的挑戰了,對于這個系統,它的功能等等很多,所以我們需要有一個大概的思路,來讓我們更好的完成它。
1、流程圖根據這個流程圖,我們先做好一個大概的框架,然后再一部分一部分的補全即可。
(1)登錄界面將學生信息管理系統的功能鍵選擇的提示信息打印出來,就組成了一個簡易的登錄界面:
void welcome()
{printf("****************************************************************\n");
printf("*********** 學生成績管理系統 ***********\n");
printf("*********** 1 ---- 增加學生信息 ***********\n");
printf("*********** 2 ---- 刪除學生信息 ***********\n");
printf("*********** 3 ---- 修改學生信息 ***********\n");
printf("*********** 4 ---- 查詢學生信息 ***********\n");
printf("*********** 5 ---- 輸出學生信息 ***********\n");
printf("*********** 6 ---- 排序學生信息 ***********\n");
printf("*********** 0 ---- 退出管理系統 ***********\n");
printf("****************************************************************\n");
printf("請選擇想要實現的功能(數字):");
}
運行結果為:
一共七個功能,為了程序的可讀性,我們盡量使用其英語全拼,
#include// 主菜單界面
void welcome();
// 增加學生信息
void Add();
// 刪除學生信息
void Delete();
// 修改學生信息
void Fix();
// 查詢學生信息
void Search();
// 輸出學生信息
void print();
// 排序學生信息
void Sort();
// 退出管理系統
void goodbye();
int main()
{int choice = 0;
while (true)
{welcome();
scanf("%d", &choice);
switch (choice)
{case 1:// 增加學生信息
Add();
break;
case 2:// 刪除學生信息
Delete();
break;
case 3:// 修改學生信息
Fix();
break;
case 4:// 查詢學生信息
Search();
break;
case 5:// 輸出學生信息
print();
break;
case 6:// 排序學生信息
Sort();
break;
case 0:// 退出管理系統
goodbye();
break;
}
printf("是否需要繼續操作?(Yes:1 / No:0):");
scanf("%d", &choice);
if (choice == 0)
{ break;
}
}
return 0;
}
void welcome()
{printf("****************************************************************\n");
printf("*********** 學生成績管理系統 ***********\n");
printf("*********** 1 ---- 增加學生信息 ***********\n");
printf("*********** 2 ---- 刪除學生信息 ***********\n");
printf("*********** 3 ---- 修改學生信息 ***********\n");
printf("*********** 4 ---- 查詢學生信息 ***********\n");
printf("*********** 5 ---- 輸出學生信息 ***********\n");
printf("*********** 6 ---- 排序學生信息 ***********\n");
printf("*********** 0 ---- 退出管理系統 ***********\n");
printf("****************************************************************\n");
printf("請選擇想要實現的功能(數字):");
}
// 增加學生信息
void Add()
{}
// 刪除學生信息
void Delete()
{}
// 修改學生信息
void Fix()
{}
// 查詢學生信息
void Search()
{}
// 輸出學生信息
void print()
{}
// 排序學生信息
void Sort()
{}
// 退出管理系統
void goodbye()
{}
運行結果為:
對于登錄界面,信息會不斷輸出,所以我們在 welcome()函數中加入一行代碼
system("cls");
其對應的頭文件為:windows.h
功能為:清屏
這樣我們的學生信息系統在使用時,就會更加的簡潔。
二、分布實現 1、定義結構體我們存儲學生信息用到的是鏈表,所以我們首先要定義結構體,來創建鏈表。(信息可以自行定義)
typedef struct Node
{int ID;// 學號
char Name[50];// 姓名
char Sex[10];// 性別
char Class[50];// 班級
char Room[20];// 宿舍號
int Score;// 成績
struct Node* next;// 指針域
}node;
node list;// 鏈表
2、文件讀取運用文件的相關知識,我們就可以將之前已經在文件中寫的一部分信息,保存在文件中,當我們要讀取它們的時候,從文件中讀取它們,并將它們放入鏈表中,不用擔心每次打開信息就會丟失的問題。
這里就需要用到文件的讀取以及鏈表的插入相關的知識點。
這里文件的讀取,我選擇的是 fscanf () 函數,而鏈表的插入我選擇的是尾插法。
代碼如下:
// 讀取文件
int Read_FILE(node* L)
{FILE* pfRead = fopen("student_information.txt", "r");
node st;
node* s;
node* t = L;
if (pfRead == NULL)
{return 0;
}
while (fscanf(pfRead, "%d %s %s %s %s %d", &st.ID, st.Name, st.Sex, st.Class, st.Room, &st.Score) != EOF)
{s = (node*)malloc(sizeof(node));
*s = st;
// 尾插法
t->next = s;
t = s;
t->next = NULL;
}
return 1;
}
3、輸出學生信息先從簡單的部分入手,讀取學生信息,我們只需要對鏈表進行一次遍歷即可,注意要判斷鏈表是否為空。
將功能和界面分開做更有利于我們快速完成:
(1)功能實現// 輸出學生信息
void Print(node* L)
{system("cls");
node* p = L->next;
Print_Printf();
if (p != NULL)
{while (p != NULL)
{ printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score);
printf("________________________________________________________________\n");
p = p->next;
}
}
}
(2)輸出界面void Print_Printf()
{printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
}
運行結果如下:
①選擇輸出學生信息
②輸出界面
完成輸出函數以后,我們需要繼續完成增加函數,由于之前在文件讀取中,我們使用了尾插法,為了起到練習的作業,我們現在使用頭插法添加學生信息。
我們將功能和界面分開來做:
(1)功能實現void Add(node* L, node e)
{// 頭插法
node* p = L;
node* s = (node*)malloc(sizeof(node));
*s = e;
s->next = p->next;
p->next = s;
}
(2)輸出界面// 增加學生信息
void Add_Printf()
{system("cls");
node st;
printf("請輸入新增學生的相關信息:\n");
printf("學號:");
scanf("%d", &st.ID);
printf("姓名:");
scanf("%s", st.Name);
printf("性別:");
scanf("%s", st.Sex);
printf("班級:");
scanf("%s", st.Class);
printf("宿舍號:");
scanf("%s", st.Room);
printf("成績:");
scanf("%d", &st.Score);
Add(&list, st);
}
運行結果為:
①選擇添加學生信息
②輸出添加學生的相關信息
③選擇輸出學生信息
④輸出界面
剛剛我們完成了增加學生信息,嘗試過的同學可能已經發現了,當我們關閉程序的時候,我們之前添加的信息并不會保存下來,所以就需要用到了文件來進行信息保存。
代碼如下:
// 保存文件
int Save_FILE(node* L)
{FILE* pfWrite = fopen("student_information.txt", "w");
if (pfWrite == NULL)
{return 0;
}
node* p = L->next;
while (p != NULL)
{fprintf(pfWrite, " %d %s %s %s %s %d\n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score);
p = p->next;
}
return 1;
}
然后我們將這個文件保存的函數放在添加函數的最后:
void Add(node* L, node e)
{// 頭插法
node* p = L;
node* s = (node*)malloc(sizeof(node));
*s = e;
s->next = p->next;
p->next = s;
Save_FILE(L);
}
這樣我們添加的學生信息就可以存放在文件中了。
6、查詢學生信息同樣的,還是將功能和界面分開做,這里的查詢功能有兩種方式,分別通過學號、姓名查找學生信息,鑒于后邊的修改、刪除函數同樣需要用到查詢,所以我們在信息查詢完成后會返回其前一個節點的位置。
(1)輸出界面// 查詢學生信息
void Search_Printf(node* L)
{system("cls");
int choice = 0;
printf("按照學號查詢 ---- 1\n");
printf("按照姓名查詢 ---- 2\n");
printf("請輸入查詢方式:");
scanf("%d", &choice);
int id;
char name[50];
node* st;
if (choice == 1)
{printf("請輸入要查詢的學號:");
scanf("%d", &id);
st = Search(id, L);
if (st == NULL)
{ printf("查無此人!\n");
}
else
{ printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
}
}
else if (choice == 2)
{printf("請輸入要查詢的姓名:");
scanf("%s", name);
st = Search(name, L);
if (st == NULL)
{ printf("查無此人!\n");
}
else
{ st = st->next;
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
}
}
}
(2)功能實現
① 按照學號查找// 按學號進行查找
node* Search_id(int id, node* L)
{node* p = L;
while (p->next != NULL)
{if (p->next->ID == id)
{ return p;
}
p = p->next;
}
return NULL;
}
② 按照姓名查找注意 strcmp 函數需要頭文件 string.h
// 按姓名進行查找
node* Search_name(char name[], node* L)
{node* p = L;
while (p->next != NULL)
{if (strcmp(name,p->next->Name))
{ return p;
}
p = p->next;
}
return NULL;
}
運行結果為:
①按照學號查詢
②按照姓名查詢
// 修改學生信息
void Fix(node* L)
{system("cls");
int id;
printf("請輸入要查找的學生的學號:");
scanf("%d", &id);
node* st = Search_id(id, L);
if (st == NULL)
{printf("查無此人!\n");
return;
}
st = st->next;
int choice = 0;
while (1)
{system("cls");
// 輸出一次所要修改的學生成績
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
printf("修改姓名 ---- 1\n");
printf("修改性別 ---- 2\n");
printf("修改班級 ---- 3\n");
printf("修改宿舍號 ---- 4\n");
printf("修改成績 ---- 5\n");
printf("請輸入要修改的信息:");
scanf("%d", &choice);
switch (choice)
{case 1:
printf("請輸入姓名:");
scanf("%s", st->Name);
break;
case 2:
printf("請輸入性別:");
scanf("%s", st->Sex);
break;
case 3:
printf("請輸入班級:");
scanf("%s", st->Class);
break;
case 4:
printf("請輸入宿舍號:");
scanf("%s", st->Room);
break;
case 5:
printf("請輸入成績:");
scanf("%d", st->Score);
break;
}
printf("是否繼續修改該學生信息?(Yes:1 / No:0):");
scanf("%d", &choice);
if (choice == 0)
{ break;
}
}
// 修改完成后該學生的信息
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
// 保存信息
Save_FILE(L);
}
運行結果為:
這里運用到的是鏈表的刪除的相關知識點。
(1)輸出界面// 刪除學生信息
void Delete_Printf(node* L)
{system("cls");
int id;
node* p;
printf("請輸入要刪除的學生的學號:");
scanf("%d", &id);
node* st = Search_id(id, L);
p = st;
if (st == NULL)
{printf("查無此人!\n");
return;
}
st = st->next;
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
Delete(p);
// 保存信息
Save_FILE(L);
}
(2)功能實現void Delete(node* s)
{node* t = s->next;
s->next = t->next;
t->next = NULL;
free(t);
}
運行結果為:
再次嘗試
說明刪除成功!
排序這里主要還是注意鏈表的交換,涉及到數據域的交換與指針域的交換。
// 排序學生信息
void Sort(node* L)
{system("cls");
int choice = 0;
printf("按照學號從大到小排序 ---- 1\n");
printf("按照學號從小到大排序 ---- 2\n");
printf("按照成績從大到小排序 ---- 3\n");
printf("按照成績從小到大排序 ---- 4\n");
printf("請選擇排序方式:");
scanf("%d", &choice);
int flag = 0;
for (node* p = L->next; p != NULL; p = p->next)
{for (node* q = p; q != NULL; q = q->next)
{ switch (choice)
{ case 1:
if (!cmp_big_ID(*p, *q))
{flag = 1;
}
break;
case 2:
if (!cmp_small_ID(*p, *q))
{flag = 1;
}
break;
case 3:
if (!cmp_big_Score(*p, *q))
{flag = 1;
}
break;
case 4:
if (!cmp_small_Score(*p, *q))
{flag = 1;
}
break;
}
if (flag == 1)
{ // 交換數據域
node t = *p;
*p = *q;
*q = t;
// 處理指針域
t.next = p->next;
p->next = q->next;
q->next = t.next;
flag = 0;
}
}
}
}
// 學號從大到小
bool cmp_big_ID(node e1, node e2)
{return e1.ID >e2.ID;
}
// 成績從大到小
bool cmp_big_Score(node e1, node e2)
{return e1.Score >e2.Score;
}
// 學號從小到大
bool cmp_small_ID(node e1, node e2)
{return e1.ID< e2.ID;
}
// 成績從小到大
bool cmp_small_Score(node e1, node e2)
{return e1.Score< e2.Score;
}
運行結果為:
①學號從大到小:
②學號從小到大:
③成績從小到大:
④成績從小到大:
終于!!!到了最激動人心的時刻了,我們的學生信息管理系統要做完了,萬事俱備只欠東風!
注意:exit(0)表示正常運行程序并退出程序。
// 退出管理系統
void goodbye()
{system("cls");
printf("歡迎下次使用學生信息管理系統!");
exit(0);// 結束程序
}
三、完整代碼#include#include#include#includetypedef struct Node
{int ID;// 學號
char Name[50];// 姓名
char Sex[10];// 性別
char Class[50];// 班級
char Room[20];// 宿舍號
int Score;// 成績
struct Node* next;// 指針域
}node;
node list;// 鏈表
// 讀取文件
int Read_FILE(node* L);
// 保存文件
int Save_FILE(node* L);
// 主菜單界面
void welcome();
// 增加學生信息
void Add(node *L,node e);// 功能
void Add_Printf();// 界面
// 刪除學生信息
void Delete_Printf(node*L);// 界面
void Delete(node* s);// 功能
// 修改學生信息
void Fix(node *L);
// 查詢學生信息
void Search_Printf(node* L);// 界面
node* Search_id(int id, node* L);// 按學號進行查找
node* Search_name(char name[], node* L);// 按姓名進行查找
// 輸出學生信息
void Print(node* L);// 功能
void Print_Printf();// 界面
// 排序學生信息
void Sort(node* L);
bool cmp_big_ID(node e1, node e2);// 學號從大到小
bool cmp_big_Score(node e1, node e2);// 成績從大到小
bool cmp_small_ID(node e1, node e2);// 學號從小到大
bool cmp_small_Score(node e1, node e2);// 成績從小到大
// 退出管理系統
void goodbye();
int main()
{int choice = 0;
Read_FILE(&list);
while (true)
{welcome();
scanf("%d", &choice);
switch (choice)
{case 1:// 增加學生信息
Add_Printf();
break;
case 2:// 刪除學生信息
Delete_Printf(&list);
break;
case 3:// 修改學生信息
Fix(&list);
break;
case 4:// 查詢學生信息
Search_Printf(&list);
break;
case 5:// 輸出學生信息
Print(&list);
break;
case 6:// 排序學生信息
Sort(&list);
break;
case 0:// 退出管理系統
goodbye();
break;
}
printf("是否需要繼續操作?(Yes:1 / No:0):");
scanf("%d", &choice);
if (choice == 0)
{ break;
}
}
return 0;
}
void welcome()
{system("cls");
printf("****************************************************************\n");
printf("*********** 學生成績管理系統 ***********\n");
printf("*********** 1 ---- 增加學生信息 ***********\n");
printf("*********** 2 ---- 刪除學生信息 ***********\n");
printf("*********** 3 ---- 修改學生信息 ***********\n");
printf("*********** 4 ---- 查詢學生信息 ***********\n");
printf("*********** 5 ---- 輸出學生信息 ***********\n");
printf("*********** 6 ---- 排序學生信息 ***********\n");
printf("*********** 0 ---- 退出管理系統 ***********\n");
printf("****************************************************************\n");
printf("請選擇想要實現的功能(數字):");
}
// 讀取文件
int Read_FILE(node* L)
{FILE* pfRead = fopen("student_information.txt", "r");
node st;
node* s;
node* t = L;
if (pfRead == NULL)
{return 0;
}
while (fscanf(pfRead, "%d %s %s %s %s %d", &st.ID, st.Name, st.Sex, st.Class, st.Room, &st.Score) != EOF)
{s = (node*)malloc(sizeof(node));
*s = st;
// 尾插法
t->next = s;
t = s;
t->next = NULL;
}
return 1;
}
// 保存文件
int Save_FILE(node* L)
{FILE* pfWrite = fopen("student_information.txt", "w");
if (pfWrite == NULL)
{return 0;
}
node* p = L->next;
while (p != NULL)
{fprintf(pfWrite, " %d %s %s %s %s %d\n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score);
p = p->next;
}
return 1;
}
// 增加學生信息
void Add_Printf()
{system("cls");
node st;
printf("請輸入新增學生的相關信息:\n");
printf("學號:");
scanf("%d", &st.ID);
printf("姓名:");
scanf("%s", st.Name);
printf("性別:");
scanf("%s", st.Sex);
printf("班級:");
scanf("%s", st.Class);
printf("宿舍號:");
scanf("%s", st.Room);
printf("成績:");
scanf("%d", &st.Score);
Add(&list, st);
}
void Add(node* L, node e)
{// 頭插法
node* p = L;
node* s = (node*)malloc(sizeof(node));
*s = e;
s->next = p->next;
p->next = s;
Save_FILE(L);
}
// 刪除學生信息
void Delete_Printf(node* L)
{system("cls");
int id;
node* p;
printf("請輸入要刪除的學生的學號:");
scanf("%d", &id);
node* st = Search_id(id, L);
p = st;
if (st == NULL)
{printf("查無此人!\n");
return;
}
st = st->next;
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
Delete(p);
// 保存信息
Save_FILE(L);
}
void Delete(node* s)
{node* t = s->next;
s->next = t->next;
t->next = NULL;
free(t);
}
// 修改學生信息
void Fix(node* L)
{system("cls");
int id;
printf("請輸入要修改的學生的學號:");
scanf("%d", &id);
node* st = Search_id(id, L);
if (st == NULL)
{printf("查無此人!\n");
return;
}
st = st->next;
int choice = 0;
while (1)
{system("cls");
// 輸出一次所要修改的學生成績
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
printf("修改姓名 ---- 1\n");
printf("修改性別 ---- 2\n");
printf("修改班級 ---- 3\n");
printf("修改宿舍號 ---- 4\n");
printf("修改成績 ---- 5\n");
printf("請輸入要修改的信息:");
scanf("%d", &choice);
switch (choice)
{case 1:
printf("請輸入姓名:");
scanf("%s", st->Name);
break;
case 2:
printf("請輸入性別:");
scanf("%s", st->Sex);
break;
case 3:
printf("請輸入班級:");
scanf("%s", st->Class);
break;
case 4:
printf("請輸入宿舍號:");
scanf("%s", st->Room);
break;
case 5:
printf("請輸入成績:");
scanf("%d", st->Score);
break;
}
printf("是否繼續修改該學生信息?(Yes:1 / No:0):");
scanf("%d", &choice);
if (choice == 0)
{ break;
}
}
// 修改完成后該學生的信息
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
// 保存信息
Save_FILE(L);
}
// 查詢學生信息
void Search_Printf(node* L)
{system("cls");
int choice = 0;
printf("按照學號查詢 ---- 1\n");
printf("按照姓名查詢 ---- 2\n");
printf("請輸入查詢方式:");
scanf("%d", &choice);
int id;
char name[50];
node* st;
if (choice == 1)
{printf("請輸入要查詢的學號:");
scanf("%d", &id);
st = Search_id(id, L);
if (st == NULL)
{ printf("查無此人!\n");
}
else
{ st = st->next;
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
}
}
else if (choice == 2)
{printf("請輸入要查詢的姓名:");
scanf("%s", name);
st = Search_name(name, L);
if (st == NULL)
{ printf("查無此人!\n");
}
else
{ st = st->next;
printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", st->ID, st->Name, st->Sex, st->Class, st->Room, st->Score);
printf("________________________________________________________________\n");
}
}
}
// 按學號進行查找
node* Search_id(int id, node* L)
{node* p = L;
while (p->next != NULL)
{if (p->next->ID == id)
{ return p;
}
p = p->next;
}
return NULL;
}
// 按姓名進行查找
node* Search_name(char name[], node* L)
{node* p = L;
while (p->next != NULL)
{if (strcmp(name, p->next->Name) == 0)
{ return p;
}
p = p->next;
}
return NULL;
}
// 輸出學生信息
void Print(node* L)
{system("cls");
node* p = L->next;
Print_Printf();
if (p != NULL)
{while (p != NULL)
{ printf("________________________________________________________________\n");
printf("%d|%s\t|%s\t|%s\t|%s\t|%d\t|\n", p->ID, p->Name, p->Sex, p->Class, p->Room, p->Score);
printf("________________________________________________________________\n");
p = p->next;
}
}
}
void Print_Printf()
{printf("________________________________________________________________\n");
printf("|學號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
printf("________________________________________________________________\n");
}
// 排序學生信息
void Sort(node* L)
{system("cls");
int choice = 0;
printf("按照學號從大到小排序 ---- 1\n");
printf("按照學號從小到大排序 ---- 2\n");
printf("按照成績從大到小排序 ---- 3\n");
printf("按照成績從小到大排序 ---- 4\n");
printf("請選擇排序方式:");
scanf("%d", &choice);
int flag = 0;
for (node* p = L->next; p != NULL; p = p->next)
{for (node* q = p; q != NULL; q = q->next)
{ switch (choice)
{ case 1:
if (!cmp_big_ID(*p, *q))
{flag = 1;
}
break;
case 2:
if (!cmp_small_ID(*p, *q))
{flag = 1;
}
break;
case 3:
if (!cmp_big_Score(*p, *q))
{flag = 1;
}
break;
case 4:
if (!cmp_small_Score(*p, *q))
{flag = 1;
}
break;
}
if (flag == 1)
{ // 交換數據域
node t = *p;
*p = *q;
*q = t;
// 處理指針域
t.next = p->next;
p->next = q->next;
q->next = t.next;
flag = 0;
}
}
}
}
// 學號從大到小
bool cmp_big_ID(node e1, node e2)
{return e1.ID >e2.ID;
}
// 成績從大到小
bool cmp_big_Score(node e1, node e2)
{return e1.Score >e2.Score;
}
// 學號從小到大
bool cmp_small_ID(node e1, node e2)
{return e1.ID< e2.ID;
}
// 成績從小到大
bool cmp_small_Score(node e1, node e2)
{return e1.Score< e2.Score;
}
// 退出管理系統
void goodbye()
{system("cls");
printf("歡迎下次使用學生信息管理系統!");
exit(0);// 結束程序
}
總結到此,學生管理系統的代碼部分就結束了,耗時9個小時,代碼+博客終于完成了,也算是有了滿滿的成就感,希望可以幫助到大家。
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
新聞名稱:C語言:學生信息管理系統-創新互聯
網頁鏈接:http://vcdvsql.cn/article32/ddjcpc.html
成都網站建設公司_創新互聯,為您提供商城網站、自適應網站、定制網站、全網營銷推廣、動態網站、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯