真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言:學(xué)生信息管理系統(tǒng)-創(chuàng)新互聯(lián)

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

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

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

一、思路

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

1、流程圖

在這里插入圖片描述

2、代碼

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

(1)登錄界面

將學(xué)生信息管理系統(tǒng)的功能鍵選擇的提示信息打印出來,就組成了一個簡易的登錄界面:

void welcome()
{printf("****************************************************************\n");
	printf("***********             學(xué)生成績管理系統(tǒng)             ***********\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("請選擇想要實現(xiàn)的功能(數(shù)字):");
}

運行結(jié)果為:
在這里插入圖片描述

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

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

#include// 主菜單界面
void welcome();

// 增加學(xué)生信息
void Add();

// 刪除學(xué)生信息
void Delete();

// 修改學(xué)生信息
void Fix();

// 查詢學(xué)生信息
void Search();

// 輸出學(xué)生信息
void print();

// 排序?qū)W生信息
void Sort();

// 退出管理系統(tǒng)
void goodbye();

int main()
{int choice = 0;
	while (true)
	{welcome();
		scanf("%d", &choice);
		switch (choice)
		{case 1:// 增加學(xué)生信息
			Add();
			break;
		case 2:// 刪除學(xué)生信息
			Delete();
			break;
		case 3:// 修改學(xué)生信息
			Fix();
			break;
		case 4:// 查詢學(xué)生信息
			Search();
			break;
		case 5:// 輸出學(xué)生信息
			print();
			break;
		case 6:// 排序?qū)W生信息
			Sort();
			break;
		case 0:// 退出管理系統(tǒng)
			goodbye();
			break;
		}
		printf("是否需要繼續(xù)操作?(Yes:1 / No:0):");
		scanf("%d", &choice);
		if (choice == 0)
		{	break;
		}
	}
	return 0;
}

void welcome()
{printf("****************************************************************\n");
	printf("***********             學(xué)生成績管理系統(tǒng)             ***********\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("請選擇想要實現(xiàn)的功能(數(shù)字):");
}

// 增加學(xué)生信息
void Add()
{}

// 刪除學(xué)生信息
void Delete()
{}

// 修改學(xué)生信息
void Fix()
{}

// 查詢學(xué)生信息
void Search()
{}

// 輸出學(xué)生信息
void print()
{}

// 排序?qū)W生信息
void Sort()
{}

// 退出管理系統(tǒng)
void goodbye()
{}

運行結(jié)果為:
在這里插入圖片描述

②改進

對于登錄界面,信息會不斷輸出,所以我們在 welcome()函數(shù)中加入一行代碼

system("cls");

其對應(yīng)的頭文件為:windows.h
功能為:清屏

這樣我們的學(xué)生信息系統(tǒng)在使用時,就會更加的簡潔。

二、分布實現(xiàn) 1、定義結(jié)構(gòu)體

我們存儲學(xué)生信息用到的是鏈表,所以我們首先要定義結(jié)構(gòu)體,來創(chuàng)建鏈表。(信息可以自行定義)

typedef struct Node
{int ID;// 學(xué)號
	char Name[50];// 姓名
	char Sex[10];// 性別
	char Class[50];// 班級
	char Room[20];// 宿舍號
	int Score;// 成績

	struct Node* next;// 指針域
}node;

node list;// 鏈表
2、文件讀取

運用文件的相關(guān)知識,我們就可以將之前已經(jīng)在文件中寫的一部分信息,保存在文件中,當(dāng)我們要讀取它們的時候,從文件中讀取它們,并將它們放入鏈表中,不用擔(dān)心每次打開信息就會丟失的問題。

這里就需要用到文件的讀取以及鏈表的插入相關(guān)的知識點。
這里文件的讀取,我選擇的是 fscanf () 函數(shù),而鏈表的插入我選擇的是尾插法。

代碼如下:

// 讀取文件
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、輸出學(xué)生信息

先從簡單的部分入手,讀取學(xué)生信息,我們只需要對鏈表進行一次遍歷即可,注意要判斷鏈表是否為空。

將功能和界面分開做更有利于我們快速完成:

(1)功能實現(xiàn)
// 輸出學(xué)生信息
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("|學(xué)號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
	printf("________________________________________________________________\n");
}

運行結(jié)果如下:

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

4、增加學(xué)生信息

完成輸出函數(shù)以后,我們需要繼續(xù)完成增加函數(shù),由于之前在文件讀取中,我們使用了尾插法,為了起到練習(xí)的作業(yè),我們現(xiàn)在使用頭插法添加學(xué)生信息。

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

(1)功能實現(xiàn)
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)輸出界面
// 增加學(xué)生信息
void Add_Printf()
{system("cls");
	node st;
	printf("請輸入新增學(xué)生的相關(guān)信息:\n");
	printf("學(xué)號:");
	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);
}

運行結(jié)果為:
①選擇添加學(xué)生信息
在這里插入圖片描述
②輸出添加學(xué)生的相關(guān)信息
在這里插入圖片描述

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

5、文件保存

剛剛我們完成了增加學(xué)生信息,嘗試過的同學(xué)可能已經(jīng)發(fā)現(xiàn)了,當(dāng)我們關(guān)閉程序的時候,我們之前添加的信息并不會保存下來,所以就需要用到了文件來進行信息保存。

代碼如下:

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

然后我們將這個文件保存的函數(shù)放在添加函數(shù)的最后:

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

這樣我們添加的學(xué)生信息就可以存放在文件中了。

6、查詢學(xué)生信息

同樣的,還是將功能和界面分開做,這里的查詢功能有兩種方式,分別通過學(xué)號、姓名查找學(xué)生信息,鑒于后邊的修改、刪除函數(shù)同樣需要用到查詢,所以我們在信息查詢完成后會返回其前一個節(jié)點的位置。

(1)輸出界面
// 查詢學(xué)生信息
void Search_Printf(node* L)
{system("cls");
	int choice = 0;
	printf("按照學(xué)號查詢 ---- 1\n");
	printf("按照姓名查詢 ---- 2\n");
	printf("請輸入查詢方式:");
	scanf("%d", &choice);

	int id;
	char name[50];
	node* st;
	if (choice == 1)
	{printf("請輸入要查詢的學(xué)號:");
		scanf("%d", &id);
		st = Search(id, L);

		if (st == NULL)
		{	printf("查無此人!\n");
		}
		else
		{	printf("________________________________________________________________\n");
			printf("|學(xué)號\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("|學(xué)號\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)功能實現(xiàn) ① 按照學(xué)號查找
// 按學(xué)號進行查找
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 函數(shù)需要頭文件 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;
}

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

7、修改學(xué)生信息
// 修改學(xué)生信息
void Fix(node* L)
{system("cls");
	int id;
	printf("請輸入要查找的學(xué)生的學(xué)號:");
	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");

		// 輸出一次所要修改的學(xué)生成績
		printf("________________________________________________________________\n");
		printf("|學(xué)號\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("是否繼續(xù)修改該學(xué)生信息?(Yes:1 / No:0):");
		scanf("%d", &choice);
		if (choice == 0)
		{	break;
		}
	}

	// 修改完成后該學(xué)生的信息
	printf("________________________________________________________________\n");
	printf("|學(xué)號\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);
}

運行結(jié)果為:
在這里插入圖片描述
在這里插入圖片描述

8、刪除學(xué)生信息

這里運用到的是鏈表的刪除的相關(guān)知識點。

(1)輸出界面
// 刪除學(xué)生信息
void Delete_Printf(node* L)
{system("cls");
	int id;

	node* p;

	printf("請輸入要刪除的學(xué)生的學(xué)號:");
	scanf("%d", &id);
	node* st = Search_id(id, L);
	p = st;

	if (st == NULL)
	{printf("查無此人!\n");
		return;
	}

	st = st->next;
	printf("________________________________________________________________\n");
	printf("|學(xué)號\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)功能實現(xiàn)
void Delete(node* s)
{node* t = s->next;

	s->next = t->next;
	t->next = NULL;

	free(t);
}

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

9、排序?qū)W生信息

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

// 排序?qū)W生信息
void Sort(node* L)
{system("cls");
	int choice = 0;
	printf("按照學(xué)號從大到小排序 ---- 1\n");
	printf("按照學(xué)號從小到大排序 ---- 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)
			{		// 交換數(shù)據(jù)域
				node t = *p;
				*p = *q;
				*q = t;
				// 處理指針域
				t.next = p->next;
				p->next = q->next;
				q->next = t.next;
				flag = 0;
			}
		}
	}
}

// 學(xué)號從大到小
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;
}

// 學(xué)號從小到大
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;
}

運行結(jié)果為:
①學(xué)號從大到?。?br />在這里插入圖片描述
在這里插入圖片描述
②學(xué)號從小到大:

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

10、退出管理系統(tǒng)

終于!??!到了最激動人心的時刻了,我們的學(xué)生信息管理系統(tǒng)要做完了,萬事俱備只欠東風(fēng)!

注意:exit(0)表示正常運行程序并退出程序。

// 退出管理系統(tǒng)
void goodbye()
{system("cls");
	printf("歡迎下次使用學(xué)生信息管理系統(tǒng)!");
	exit(0);// 結(jié)束程序
}
三、完整代碼
#include#include#include#includetypedef struct Node
{int ID;// 學(xué)號
	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();

// 增加學(xué)生信息
void Add(node *L,node e);// 功能
void Add_Printf();// 界面

// 刪除學(xué)生信息
void Delete_Printf(node*L);// 界面
void Delete(node* s);// 功能

// 修改學(xué)生信息
void Fix(node *L);

// 查詢學(xué)生信息
void Search_Printf(node* L);// 界面
node* Search_id(int id, node* L);// 按學(xué)號進行查找
node* Search_name(char name[], node* L);// 按姓名進行查找

// 輸出學(xué)生信息
void Print(node* L);// 功能
void Print_Printf();// 界面

// 排序?qū)W生信息
void Sort(node* L);
bool cmp_big_ID(node e1, node e2);// 學(xué)號從大到小
bool cmp_big_Score(node e1, node e2);// 成績從大到小
bool cmp_small_ID(node e1, node e2);// 學(xué)號從小到大
bool cmp_small_Score(node e1, node e2);// 成績從小到大

// 退出管理系統(tǒng)
void goodbye();

int main()
{int choice = 0;
	Read_FILE(&list);
	while (true)
	{welcome();
		scanf("%d", &choice);
		switch (choice)
		{case 1:// 增加學(xué)生信息
			Add_Printf();
			break;
		case 2:// 刪除學(xué)生信息
			Delete_Printf(&list);
			break;
		case 3:// 修改學(xué)生信息
			Fix(&list);
			break;
		case 4:// 查詢學(xué)生信息
			Search_Printf(&list);
			break;
		case 5:// 輸出學(xué)生信息
			Print(&list);
			break;
		case 6:// 排序?qū)W生信息
			Sort(&list);
			break;
		case 0:// 退出管理系統(tǒng)
			goodbye();
			break;
		}
		printf("是否需要繼續(xù)操作?(Yes:1 / No:0):");
		scanf("%d", &choice);
		if (choice == 0)
		{	break;
		}
	}
	return 0;
}

void welcome()
{system("cls");
	printf("****************************************************************\n");
	printf("***********             學(xué)生成績管理系統(tǒng)             ***********\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("請選擇想要實現(xiàn)的功能(數(shù)字):");
}

// 讀取文件
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;
}

// 增加學(xué)生信息
void Add_Printf()
{system("cls");
	node st;
	printf("請輸入新增學(xué)生的相關(guān)信息:\n");
	printf("學(xué)號:");
	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);
}

// 刪除學(xué)生信息
void Delete_Printf(node* L)
{system("cls");
	int id;

	node* p;

	printf("請輸入要刪除的學(xué)生的學(xué)號:");
	scanf("%d", &id);
	node* st = Search_id(id, L);
	p = st;

	if (st == NULL)
	{printf("查無此人!\n");
		return;
	}

	st = st->next;
	printf("________________________________________________________________\n");
	printf("|學(xué)號\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);
}

// 修改學(xué)生信息
void Fix(node* L)
{system("cls");
	int id;
	printf("請輸入要修改的學(xué)生的學(xué)號:");
	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");

		// 輸出一次所要修改的學(xué)生成績
		printf("________________________________________________________________\n");
		printf("|學(xué)號\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("是否繼續(xù)修改該學(xué)生信息?(Yes:1 / No:0):");
		scanf("%d", &choice);
		if (choice == 0)
		{	break;
		}
	}

	// 修改完成后該學(xué)生的信息
	printf("________________________________________________________________\n");
	printf("|學(xué)號\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);
}

// 查詢學(xué)生信息
void Search_Printf(node* L)
{system("cls");
	int choice = 0;
	printf("按照學(xué)號查詢 ---- 1\n");
	printf("按照姓名查詢 ---- 2\n");
	printf("請輸入查詢方式:");
	scanf("%d", &choice);

	int id;
	char name[50];
	node* st;
	if (choice == 1)
	{printf("請輸入要查詢的學(xué)號:");
		scanf("%d", &id);
		st = Search_id(id, L);

		if (st == NULL)
		{	printf("查無此人!\n");
		}
		else
		{	st = st->next;
			printf("________________________________________________________________\n");
			printf("|學(xué)號\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("|學(xué)號\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");
		}
	}
}

// 按學(xué)號進行查找
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;
}

// 輸出學(xué)生信息
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("|學(xué)號\t|姓名\t|性別\t|班級\t\t|宿舍號\t\t|成績\t|\n");
	printf("________________________________________________________________\n");
}

// 排序?qū)W生信息
void Sort(node* L)
{system("cls");
	int choice = 0;
	printf("按照學(xué)號從大到小排序 ---- 1\n");
	printf("按照學(xué)號從小到大排序 ---- 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)
			{		// 交換數(shù)據(jù)域
				node t = *p;
				*p = *q;
				*q = t;
				// 處理指針域
				t.next = p->next;
				p->next = q->next;
				q->next = t.next;
				flag = 0;
			}
		}
	}
}

// 學(xué)號從大到小
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;
}

// 學(xué)號從小到大
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;
}

// 退出管理系統(tǒng)
void goodbye()
{system("cls");
	printf("歡迎下次使用學(xué)生信息管理系統(tǒng)!");
	exit(0);// 結(jié)束程序
}
總結(jié)

到此,學(xué)生管理系統(tǒng)的代碼部分就結(jié)束了,耗時9個小時,代碼+博客終于完成了,也算是有了滿滿的成就感,希望可以幫助到大家。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


分享名稱:C語言:學(xué)生信息管理系統(tǒng)-創(chuàng)新互聯(lián)
本文地址:http://weahome.cn/article/ddjcpc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部