bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

C語言:學生信息管理系統-創新互聯

文章目錄
  • 前言
  • 一、思路
    • 1、流程圖
    • 2、代碼
      • (1)登錄界面
      • (2)功能框架
        • ①基本的函數框架
        • ②改進
  • 二、分布實現
    • 1、定義結構體
    • 2、文件讀取
    • 3、輸出學生信息
      • (1)功能實現
      • (2)輸出界面
    • 4、增加學生信息
      • (1)功能實現
      • (2)輸出界面
    • 5、文件保存
    • 6、查詢學生信息
      • (1)輸出界面
      • (2)功能實現
        • ① 按照學號查找
        • ② 按照姓名查找
    • 7、修改學生信息
    • 8、刪除學生信息
      • (1)輸出界面
      • (2)功能實現
    • 9、排序學生信息
    • 10、退出管理系統
  • 三、完整代碼
  • 總結

創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站設計制作、網站設計、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的勐臘網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!前言

C語言學完了,知識很多,也很瑣碎,學生信息管理系統對我們而言,就是一次機會,一次讓我們將C語言知識融會貫通的機會,通過編程學生信息管理系統,我們運用了循環、指針,結構體,鏈表、函數、文件等知識,也能讓我們更加熟悉了C語言相關知識。話不多說,直接開始。

一、思路

學生信息管理系統,說難也難,說簡單也簡單,對于初學者的我們也算一項不小的挑戰了,對于這個系統,它的功能等等很多,所以我們需要有一個大概的思路,來讓我們更好的完成它。

1、流程圖

在這里插入圖片描述

2、代碼

根據這個流程圖,我們先做好一個大概的框架,然后再一部分一部分的補全即可。

(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("請選擇想要實現的功能(數字):");
}

運行結果為:
在這里插入圖片描述

(2)功能框架 ①基本的函數框架

一共七個功能,為了程序的可讀性,我們盡量使用其英語全拼,

#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");
}

運行結果如下:

①選擇輸出學生信息
在這里插入圖片描述
②輸出界面
在這里插入圖片描述

4、增加學生信息

完成輸出函數以后,我們需要繼續完成增加函數,由于之前在文件讀取中,我們使用了尾插法,為了起到練習的作業,我們現在使用頭插法添加學生信息。

我們將功能和界面分開來做:

(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);
}

運行結果為:
①選擇添加學生信息
在這里插入圖片描述
②輸出添加學生的相關信息
在這里插入圖片描述

③選擇輸出學生信息
在這里插入圖片描述
④輸出界面
在這里插入圖片描述

5、文件保存

剛剛我們完成了增加學生信息,嘗試過的同學可能已經發現了,當我們關閉程序的時候,我們之前添加的信息并不會保存下來,所以就需要用到了文件來進行信息保存。

代碼如下:

// 保存文件
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;
}

運行結果為:
①按照學號查詢
在這里插入圖片描述
②按照姓名查詢
在這里插入圖片描述

7、修改學生信息
// 修改學生信息
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);
}

運行結果為:
在這里插入圖片描述
在這里插入圖片描述

8、刪除學生信息

這里運用到的是鏈表的刪除的相關知識點。

(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);
}

運行結果為:
在這里插入圖片描述
再次嘗試
在這里插入圖片描述
說明刪除成功!

9、排序學生信息

排序這里主要還是注意鏈表的交換,涉及到數據域的交換與指針域的交換。

// 排序學生信息
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;
}

運行結果為:
①學號從大到小:
在這里插入圖片描述
在這里插入圖片描述
②學號從小到大:

在這里插入圖片描述
在這里插入圖片描述
③成績從小到大:
在這里插入圖片描述
在這里插入圖片描述
④成績從小到大:
在這里插入圖片描述
在這里插入圖片描述

10、退出管理系統

終于!!!到了最激動人心的時刻了,我們的學生信息管理系統要做完了,萬事俱備只欠東風!

注意: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。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站建設