當(dāng)前位置:首頁 > 公眾號精選 > C語言與CPP編程
[導(dǎo)讀]最近可能是接近考試,有小伙伴微信私聊讓找個學(xué)生成績管理系統(tǒng),今天發(fā)一下,比較簡潔。 案例描述 案例要求模擬開發(fā)一個學(xué)生成績管理系統(tǒng),此系統(tǒng)具有以下功能: 添加學(xué)生信息,包括學(xué)號、姓名、語文成績、數(shù)學(xué)成績; 顯示學(xué)生信息,將所有學(xué)生信息打印輸出;


最近可能是接近考試,有小伙伴微信私聊讓找個學(xué)生成績管理系統(tǒng),今天發(fā)一下,比較簡潔。

案例描述

案例要求模擬開發(fā)一個學(xué)生成績管理系統(tǒng),此系統(tǒng)具有以下功能:

  1. 添加學(xué)生信息,包括學(xué)號、姓名、語文成績、數(shù)學(xué)成績;
  2. 顯示學(xué)生信息,將所有學(xué)生信息打印輸出;
  3. 修改學(xué)生信息,可以根據(jù)姓名查找到學(xué)生,然后可以修改學(xué)生姓名、成績項(xiàng);
  4. 刪除學(xué)生信息,根據(jù)學(xué)號查找到學(xué)生,將其信息刪除;
  5. 查找學(xué)生信息,根據(jù)學(xué)生姓名,將其信息打印輸出;
  6. 按學(xué)生總成績進(jìn)行從高到低排序。

這些功能之間的邏輯關(guān)系如下圖所示:

學(xué)生成績管理系統(tǒng)

案例分析

分析案例需求可知,該系統(tǒng)首先會向用戶展現(xiàn)一個菜單選擇界面,用戶可以根據(jù)菜單界面的提示,選擇不同的功能進(jìn)入子界面,因此可以針對每一個功能定義一個函數(shù),通過函數(shù)調(diào)用實(shí)現(xiàn)相應(yīng)功能。由系統(tǒng)需求可知,該系統(tǒng)主要有6大功能,因此需要定義6個函數(shù)。

  1. 添加記錄——add()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字1時(shí),會調(diào)用add()函數(shù)進(jìn)入添加記錄模塊,提示用戶輸入學(xué)生的學(xué)號、姓名、計(jì)算機(jī)基礎(chǔ)成績、數(shù)據(jù)結(jié)構(gòu)成績。當(dāng)用戶輸入完畢后,會提示用戶是否繼續(xù)添加,Y表示繼續(xù),N表示返回。需要注意的是,在添加學(xué)號時(shí)不能重復(fù),如果輸入重復(fù)的學(xué)號就會提示此學(xué)號已存在。
void add(struct student stu[])
{
int i, id = 0; //i作為循環(huán)變量,id用來保存新學(xué)號
char quit; //保存是否退出的選擇
do
{
printf("學(xué)號:");
scanf("%d", &id);
for (i = 0; i < n; i++)
{
if (id == stu[i].id)
{
printf("此學(xué)號存在!\n");
return;
}
}

stu[i].id = id;
printf("姓名:");
scanf("%s", &stu[i].name);
printf("計(jì)算機(jī)基礎(chǔ)成績:");
scanf("%d", &stu[i].chinese);
printf("數(shù)據(jù)結(jié)構(gòu)成績:");
scanf("%d", &stu[i].math);
stu[i].sum = stu[i].chinese + stu[i].math;
n++; //記錄條數(shù)加1
printf("是否繼續(xù)添加?(Y/N)");
scanf("\t%c", &quit);
} while (quit != 'N');
}

  1. 顯示記錄——showAll()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字2時(shí),會調(diào)用show()函數(shù)進(jìn)入顯示記錄模塊,并向控制臺輸出錄入的所有學(xué)生的學(xué)號、姓名、數(shù)據(jù)結(jié)構(gòu)成績、計(jì)算機(jī)基礎(chǔ)成績和成績總和。
void show(struct student stu[], int i)
{
printf("%-10d", stu[i].id);
printf("%-10s", stu[i].name);
printf("%-10d", stu[i].chinese);
printf("%-10d", stu[i].math);
printf("%-10d\n", stu[i].sum);
}

  1. 修改記錄——modify()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字3時(shí),會調(diào)用modify()函數(shù)進(jìn)入修改記錄模塊,輸入要修改的學(xué)生姓名,當(dāng)用戶輸入了已錄入的學(xué)生姓名后,如果學(xué)生信息存在即可修改除學(xué)號以外的其他信息,否則輸出沒有找到該生的記錄。
void modify(struct student stu[])
{
char name[8], ch;
int i;
printf("修改學(xué)生的記錄。\n");
printf("請輸入學(xué)生的姓名:");
scanf("%s", &name);
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].name) == 0)
{
getchar();
printf("找到該生的記錄,如下所示:\n");
HH; //顯示記錄的標(biāo)題
show(stu, i);
printf("是否修改?(Y/N)\n");
scanf("%c", &ch);
if (ch == 'Y' || ch == 'y')
{
getchar();
printf("姓名:");
scanf("%s", &stu[i].name);
printf("計(jì)算機(jī)基礎(chǔ)成績:");
scanf("%d", &stu[i].chinese);
printf("數(shù)據(jù)結(jié)構(gòu)成績:");
scanf("%d", &stu[i].math);
stu[i].sum = stu[i].chinese + stu[i].math;
printf("修改完畢。\n");
}
return;
}
}
printf("沒有找到該生的記錄。\n");
}

  1. 刪除記錄——del()函數(shù)當(dāng)用戶在功能菜單中選擇數(shù)字4時(shí),會調(diào)用del()函數(shù)進(jìn)入刪除記錄模塊,對學(xué)生學(xué)號進(jìn)行判斷,如果學(xué)號存在即可刪除該生的所有信息,否則輸出沒有找到該生的記錄。
void del(struct student stu[])
{
int id, i;
char ch;
printf("刪除學(xué)生的記錄。\n");
printf("請輸入學(xué)號:");
scanf("%d", &id);
for (i = 0; i < n; i++)
{
if (id == stu[i].id)
{
getchar();
printf("找到該生的記錄,如下所示:\n");
HH; //顯示記錄的標(biāo)題
show(stu, i); //顯示數(shù)組stu中的第i條記錄
printf("是否刪除?(Y/N)\n");
scanf("%c", &ch);

if (ch == 'Y' || ch == 'y')
{
for (; i < n; i++)
// 被刪除記錄后面的記錄均前移一位
stu[i] = stu[i + 1];
n--; //記錄總條數(shù)減1
printf("刪除成功!");
}
return;
}
}
printf("沒有找到該生的記錄!\n");
}

  1. 查找記錄——search()函數(shù)當(dāng)用戶在功能菜單中輸入數(shù)字5時(shí),會調(diào)用search()進(jìn)入查找記錄模塊,在該模塊中輸入查找的學(xué)生姓名,如果該學(xué)生存在則輸出該學(xué)生的全部信息,否則輸出沒有找到該生的記錄。
void search(struct student stu[])
{
char name[8];
int i;
printf("查找學(xué)生的記錄。\n");
printf("請輸入學(xué)生的姓名:");
scanf("%s", &name);
for (i = 0; i < n; i++)
{
if (strcmp(name, stu[i].name) == 0)
{
printf("找到該生的記錄,如下所示:\n");
HH; //顯示記錄的標(biāo)題
show(stu, i); //顯示數(shù)組stu中的第i條記錄
return;
}
}
printf("沒有找到該生的記錄。\n");
}

  1. 排序——sort()函數(shù)當(dāng)用戶在功能菜單中輸入數(shù)字6時(shí),會調(diào)用sort()函數(shù)進(jìn)入排序記錄模塊,該模塊會輸出所有學(xué)生的信息,并按總成績由高到低進(jìn)行排序。
void sort(struct student stu[])
{
int i, j;
struct student t;
printf("按總成績進(jìn)行排序,");

for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (stu[i].sum < stu[j].sum)
{
t = stu[i];
stu[i] = stu[j];
stu[j] = t;
}
}
}
printf("排序結(jié)果如下:\n");
showAll(stu); //顯示排序后的所有記錄
}

案例實(shí)現(xiàn)

由于該系統(tǒng)需要定義6個函數(shù),而且還涉及變量,代碼較多,因此可以分文件實(shí)現(xiàn)該系統(tǒng),將函數(shù)聲明與定義在頭文件student.h中實(shí)現(xiàn),函數(shù)實(shí)現(xiàn)在student.c文件中完成,函數(shù)調(diào)用在main.c文件中執(zhí)行。

  1. 定義student.h文件在student.h文件中定義項(xiàng)目需要的變量與函數(shù)聲明。在定義變量時(shí),因?yàn)閷W(xué)生信息包括學(xué)號、姓名和成績等不同數(shù)據(jù)類型的屬性,所以需要定義一個學(xué)生類型的結(jié)構(gòu)體。在存儲學(xué)生信息時(shí),可選用數(shù)組、字符串指針,考慮到學(xué)生要根據(jù)總成績來排序,為方便排序,我們選用數(shù)組來存儲學(xué)生信息。
struct student
{
int id; // 學(xué)號
char name[8]; //姓名
int chinese; //計(jì)算機(jī)基礎(chǔ)成績
int math; //數(shù)據(jù)結(jié)構(gòu)成績
int sum; //總分
};
  1. 定義student.c文件在student.c文件中實(shí)現(xiàn)各個功能函數(shù)。

  2. 定義main.c文件在main.c文件中,定義保存學(xué)生信息的結(jié)構(gòu)體數(shù)組,構(gòu)建學(xué)生成績管理系統(tǒng)主界面,使用while(1)循環(huán)控制是否退出系統(tǒng),在while循環(huán)中使用switch語句判斷用戶所選擇的功能,根據(jù)用戶選擇的功能調(diào)用相應(yīng)的函數(shù)。

備注:公眾號回復(fù)“學(xué)生成績管理系統(tǒng)”獲取完整代碼

最近原創(chuàng)推薦

字符串操作的全面總結(jié)

代碼防御性編程的十條技巧

 九種查找算法

 十大經(jīng)典排序算法(動態(tài)演示+代碼)

 C語言與C++面試知識總結(jié)

  數(shù)據(jù)結(jié)構(gòu)之堆棧

 一文輕松理解內(nèi)存對齊

點(diǎn)【在看】是最大的支持 

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉