摘要:概要設(shè)計(jì)功能設(shè)計(jì)該學(xué)生成績(jī)管理系統(tǒng)可以按功能進(jìn)行模塊劃分,其模塊圖如圖所示。
歡迎來(lái)到
的博客。我是小魏,一名普通的在校大學(xué)生。希望大家多多關(guān)照,我們一起成長(zhǎng)一起進(jìn)步,也希望大家多多支持我鴨,喜歡我就給我一個(gè)關(guān)注吧!
題目:學(xué)生成績(jī)管理系統(tǒng)
學(xué)生數(shù)據(jù)由學(xué)號(hào)、姓名、班級(jí)、三門課(數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī))的成績(jī)和平均成績(jī)構(gòu)成。 實(shí)現(xiàn)功能包括:
(1)添加學(xué)生的記錄
(2)查詢學(xué)生(分別按學(xué)號(hào)和姓名)
(3)對(duì)學(xué)生數(shù)據(jù)排序(按總成績(jī)的降序)
(4)刪除學(xué)生記錄
(5)修改學(xué)生記錄
(6)班級(jí)成績(jī)分析(各科平均成績(jī)、最高分、最低分、及格率)
(7)輸出學(xué)生信息表(全部學(xué)生成績(jī)信息顯示或按班級(jí)顯示學(xué)生成績(jī)信息)
(1)學(xué)生信息包括學(xué)號(hào)、姓名、班級(jí)和所學(xué)三門課程(數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī))的成績(jī) 和平均成績(jī)(每位學(xué)生的平均分和各科平均分)以及各科成績(jī)的最低分和最高分、及格 率;
(2)學(xué)生信息管理系統(tǒng)以菜單方式工作;
(3)錄入的學(xué)生信息用文件形式保存,并可以對(duì)其進(jìn)行添加、查詢、數(shù)據(jù)排序(按總 分)、修改、成績(jī)分析、刪除等基本操作;
(4)按學(xué)號(hào)查詢學(xué)生信息,或按姓名查詢;
(5)按學(xué)號(hào)修改學(xué)生信息并保存到文件中;
(6)輸出學(xué)生信息表(全部學(xué)生成績(jī)信息顯示或按班級(jí)顯示學(xué)生成績(jī)信息);
(7)用戶使用過(guò)程中能夠要有容錯(cuò)處理。
設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng),使之能提供以下功能:
(1)添加學(xué)生信息;
(2)查詢學(xué)生信息(分別按學(xué)號(hào)和姓名);
(3)對(duì)學(xué)生的成績(jī)進(jìn)行排序(按總分降序);
(4)修改學(xué)生信息;
(5)刪除學(xué)生信息;
(6)按本專業(yè)學(xué)生成績(jī)分析和按班級(jí)成績(jī)分析(各科平均成績(jī)、最高分、最低分、及 格率);
(7)輸出學(xué)生信息表;
(8)學(xué)生信息保存到文件中。
該學(xué)生成績(jī)管理系統(tǒng)可以按功能進(jìn)行模塊劃分,其模塊圖如圖1所示。
學(xué)號(hào),15個(gè)字符;
姓名,10個(gè)字符;
班級(jí),正整數(shù);
各科分?jǐn)?shù),無(wú)小數(shù)點(diǎn);
總分,無(wú)小數(shù)點(diǎn);
各科平均分,小數(shù)點(diǎn)后兩位;
各科及格率,小數(shù)點(diǎn)后兩位;
各科最低分,無(wú)小數(shù)點(diǎn);
各科最高分,無(wú)小數(shù)點(diǎn);
在處理過(guò)程中各項(xiàng)可以作為一個(gè)學(xué)生的不同屬性來(lái)進(jìn)行處理;整體作為一張二維表進(jìn)行處理,因此,采用結(jié)構(gòu)數(shù)組。
系統(tǒng)的執(zhí)行應(yīng)從功能菜單的選擇開始,依據(jù)用戶的選擇來(lái)進(jìn)行后續(xù)的處理,直到用戶選擇保存數(shù)據(jù)并退出系統(tǒng)為止,其間應(yīng)對(duì)用戶的選擇做出判斷及異常處理。系統(tǒng)的流程圖如圖2所示。
菜單選擇功能中,通過(guò)輸入不同的數(shù)字(1-6)來(lái)進(jìn)行菜單選擇,實(shí)現(xiàn)不同的程序結(jié)果,直到用戶輸入數(shù)字6時(shí),就直接退出系統(tǒng)。菜單選擇模塊的流程圖如圖3所示。
添加學(xué)生信息模塊中,實(shí)現(xiàn)添加學(xué)生的班級(jí)、姓名、學(xué)號(hào)和三門成績(jī)(數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī))的輸入,直到用戶輸入x為0時(shí),則結(jié)束當(dāng)前輸入,并返回上級(jí)主菜單。添加模塊的流程圖如圖4所示。
輸出模塊中,先判斷鏈表大小list->size是否為0,若不為空,進(jìn)入菜單選擇輸入不同的數(shù)字(1-3),若用戶輸入1,則實(shí)現(xiàn)本專業(yè)學(xué)生成績(jī)的輸出,若輸入2,則按班級(jí)輸出學(xué)生信息,直到用戶輸入數(shù)字3時(shí),結(jié)束當(dāng)前信息的輸出,并返回上級(jí)主菜單。輸出模塊的流程圖如圖5所示。
通過(guò)菜單選擇,輸入不同的數(shù)字(1-3)實(shí)現(xiàn)不同的方式進(jìn)行查詢,若輸入數(shù)字1,按學(xué)號(hào)進(jìn)行查詢學(xué)生信息,輸入數(shù)字2,按姓名查詢學(xué)生信息,輸入數(shù)字3,結(jié)束信息查詢功能,返回上級(jí)主菜單。查詢模塊的流程圖如圖6所示。
先進(jìn)行判斷鏈表是否為空,若不為空,就能進(jìn)行輸入學(xué)生的學(xué)號(hào);然后,再進(jìn)行判斷是否有用戶輸入的學(xué)號(hào),若沒(méi)有,則返回學(xué)號(hào)輸入,再進(jìn)行重新輸入學(xué)號(hào)。若在鏈表中的數(shù)據(jù)
存在用戶輸入的學(xué)號(hào),則輸出該學(xué)生的信息,之后進(jìn)行菜單選擇,可輸入不同的數(shù)字(1-5),用戶可選擇想修改的的數(shù)據(jù),直到該用戶輸入數(shù)字5時(shí),返回上級(jí)主菜單。信息修改模塊流程圖如圖7所示。
進(jìn)入該程序運(yùn)行中,需判斷鏈表大小list->size是否為0,若為0,則結(jié)束信息刪除操作;若不為0,將進(jìn)入學(xué)號(hào)輸入操作;然后判斷鏈表數(shù)據(jù)中是否存在用戶輸入的學(xué)號(hào)id,若不存在,進(jìn)入退出選擇操作,用戶可輸入0或其他數(shù)字,若輸入0,則返回上級(jí)菜單;若輸入其他數(shù)字,則該學(xué)生的信息將在鏈表中清除并釋放該空間。若該用戶繼續(xù)進(jìn)行刪除操作,可輸入其他數(shù)字鍵;若輸入0,直接退出該程序并返回上級(jí)主菜單。信息刪除模塊的流程圖如圖8所示。
在保存數(shù)據(jù)之前,首先需打開文件,然后判斷文件是否為空,若為空就會(huì)提示該文件打開失敗,直接結(jié)束整個(gè)程序運(yùn)行;若文件不為空,進(jìn)行判斷鏈表的頭節(jié)點(diǎn)是否為空,若頭節(jié)點(diǎn)為空,則直接關(guān)閉該文件并結(jié)束程序,若頭節(jié)點(diǎn)不為空,將鏈表數(shù)據(jù)保存到文件中,直到尾節(jié)點(diǎn)為空,就會(huì)關(guān)閉該文件并退出系統(tǒng)。信息保存模塊的流程圖如圖9所示。
學(xué)生信息:
struct Student{ int class_num; //班級(jí) char id[15]; //學(xué)號(hào) char name[10]; //姓名 float score[3]; //各科分?jǐn)?shù) float sum; //總成績(jī)float course_av[3]; //各科平均分float course_pass[3]; //各科及格率float course_max[3]; //各科最低分float course_min[3]; //各科最高分};
⑴鋸齒型程序書寫格式
⑵變量說(shuō)明
⑶函數(shù)功能、入口及出口參數(shù)說(shuō)明
⑷關(guān)鍵處有足夠的注釋
代碼1:
/* 文件list.h */#ifndef _LIST_H_ //防止重復(fù)編譯,_LIST_H_為符號(hào)常量#define _LIST_H_struct Student{ int class_num; char id[15]; char name[10]; float score[3]; float sum; float course_av[3]; float course_pass[3]; float course_max[3]; float course_min[3]; };struct Node{ struct Student student; struct Node *next;};struct List{ struct Node *head; //頭節(jié)點(diǎn)設(shè)計(jì) int size;};struct List* createList(); //創(chuàng)建鏈表void destoryList(struct List *list); //銷毀鏈表struct Node* createNode(struct Student student); //創(chuàng)建節(jié)點(diǎn) struct Node* getLastNode(struct List *list); //獲取鏈表最后一個(gè)節(jié)點(diǎn)struct Node* getBeforeNode(struct List *list,struct Student student); //獲取上一個(gè)節(jié)點(diǎn)void addList(struct List *list, struct Node *node); //將節(jié)點(diǎn)添加到鏈表中 #endif
代碼2:
/* 文件fun.h */#ifndef _FUN_H_ //防止重復(fù)編譯,_FUN_H_為符號(hào)常量#define _FUN_H_void Menu(); //菜單欄FILE* openFile(char *filename,char *type); //打開文件void fileToList(struct List *list,char *filename); //文件數(shù)據(jù)添加到鏈表中 void listToFile(struct List *list,char *filename); //將鏈表數(shù)據(jù)存儲(chǔ)到文件中void input(struct List *list); //添加學(xué)生信息void sort(struct List *list); //按總成績(jī)排序void output(struct List *list); //輸出學(xué)生信息void find(struct List *list); //查找學(xué)生信息void detail(struct Node *temp); //修改具體細(xì)節(jié) void change(struct List *list); //修改學(xué)生信息 void Delete(struct List *list); //刪除void quit(); //退出畫面#endif
//創(chuàng)建鏈表 struct List* createList(){ struct List *list; list=(struct List*)malloc(sizeof(struct List)); list->head=NULL; list->size=0; return list;}//銷毀鏈表 void destoryList(struct List *list){ struct Node *temp=list->head,*del=NULL; while(temp) { del=temp; temp=temp->next; free(del);//釋放節(jié)點(diǎn)空間 list->size--; } free(list);//釋放鏈表空間 }//創(chuàng)建節(jié)點(diǎn) struct Node* createNode(struct Student student){ struct Node *node=NULL; node=(struct Node*)malloc(sizeof(struct Node)); node->student=student; node->next=NULL; return node;}//獲取鏈表最后一個(gè)節(jié)點(diǎn) struct Node* getLastNode(struct List *list){ struct Node *temp=list->head,*last=NULL; while(temp) { last=temp; temp=temp->next; } return last;}//獲取當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn) struct Node* getBeforeNode(struct List *list,struct Student student){ struct Node *temp=list->head,*prevNode=NULL; while(temp) { if(strcmp(temp->student.id,student.id)==0) { break; } prevNode=temp; temp=temp->next; } return prevNode;}//將節(jié)點(diǎn)添加到鏈表中 void addList(struct List *list, struct Node *node){ struct Node *last; if(list->head==NULL) { list->head=node; } else { last=getLastNode(list); last->next=node; } list->size++;}
int main(){ int num=0; FILE*file=NULL; struct List *list=NULL; list=createList(); //創(chuàng)建鏈表 fileToList(list,"studentFile.txt");//把數(shù)據(jù)添加到鏈表中 SetConsoleTitle("學(xué)生成績(jī)管理系統(tǒng)"); void Menu() { printf("******學(xué)生成績(jī)管理系統(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.保存后退出********/n"); printf("請(qǐng)選擇:"); } while(1) { system("cls"); //清屏 Menu(); //菜單欄 scanf("%d",&num); switch(num){ case 1: system("cls"); input(list); //添加 printf("請(qǐng)輸入任意數(shù)字鍵/n返回上級(jí)菜單:"); scanf("%d",&num); break; case 2: system("cls"); output(list); //輸出 break; case 3: system("cls"); find(list); //查詢 break; case 4: system("cls"); change(list); //修改 break; case 5: system("cls"); Delete(list); //刪除 break; case 6: system("cls"); listToFile(list,"studentFile.txt");//數(shù)據(jù)保存到文件中 destoryList(list); // 銷毀鏈表 quit(); //退出畫面 exit(0); default: printf("輸入有誤,請(qǐng)重新選擇!/n"); printf("請(qǐng)輸入任意數(shù)字鍵/n返回上級(jí)菜單:"); scanf("%d",&num); break; } } return 0;}
void input(struct List *list){ struct Student student; struct Node *node=NULL; //建立新節(jié)點(diǎn) struct Node *temp; //建立新節(jié)點(diǎn) int x,i,flag; while(1) { flag=1; printf("-->請(qǐng)輸入該學(xué)生信息的班級(jí)、學(xué)號(hào)、姓名<--/n-->"); scanf("%d %s %s",&student.class_num,student.id,student.name); temp=list->head; //當(dāng)前鏈表的下一個(gè)節(jié)點(diǎn) while(temp) { if(strcmp(temp->student.id,student.id)==0) //限定學(xué)號(hào)唯一 { printf("您輸入的學(xué)號(hào)已存在!/n"); flag=0; } temp=temp->next; //鏈表的下一個(gè)節(jié)點(diǎn) } if(flag) { printf("-->請(qǐng)輸入該學(xué)生的每門成績(jī)<--/n數(shù)學(xué):"); scanf("%f",&student.score[0]); printf("英語(yǔ):"); scanf("%f",&student.score[1]); printf("計(jì)算機(jī):"); scanf("%f",&student.score[2]); student.sum=0; for(i=0;i<3;i++) { student.sum+=student.score[i]; } node=createNode(student); //創(chuàng)建節(jié)點(diǎn) addList(list,node); //添加到鏈表 } printf("退出請(qǐng)按數(shù)字0,其他數(shù)字鍵繼續(xù)添加:"); scanf("%d",&x); if(x==0)break; } }
//按總成績(jī)排序 void sort(struct List *list){ int i,j; struct Student s; struct Node *temp=NULL,*temp1=NULL,*temp2=NULL; //建立新節(jié)點(diǎn) for(i=0;i<list->size-1;i++) { temp=list->head; //當(dāng)前鏈表的下一個(gè)節(jié)點(diǎn) for(j=0;j<list->size-i-1;j++) { temp1=temp; temp2=temp->next; //新建鏈表的下一個(gè)節(jié)點(diǎn) if(temp1->student.sum<temp2->student.sum) { s=temp1->student; temp1->student=temp2->student; temp2->student=s; } temp=temp->next; //當(dāng)前鏈表的下一個(gè)節(jié)點(diǎn) } }}//輸出學(xué)生信息 void output(struct List *list){ int cnt=0,num=0,class_num=0,i; float av_math,av_eng,av_se; //數(shù)學(xué)、英語(yǔ)、計(jì)算機(jī)平均分 float pass[3],min[3],max[3]; //及格率、最低分、最高分 struct Node *temp=list->head; //把新節(jié)點(diǎn)作為頭結(jié)點(diǎn) if(list->size==0) //若鏈表空間大小
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/122005.html
摘要:以下題目和解析分別來(lái)源于我的新書程序員面試筆試寶典程序員面試筆試真題解析。類通過(guò)一個(gè)簡(jiǎn)單的外部接口與外界發(fā)生關(guān)系,對(duì)象與對(duì)象之間通過(guò)消息進(jìn)行通信。真題獲得實(shí)例化對(duì)象所屬類名字的函數(shù)是。 以下題目和解析分別來(lái)源于我的新書《PHP程序員面試筆試寶典》、《PHP程序員面試筆試真題解析》。 1、PHP常考基礎(chǔ) 1、PHP與ASP、JSP有什么區(qū)別?ASP全名Active Server Page...
摘要:如上海北京等管理員自己創(chuàng)建其他地方的學(xué)校管理員創(chuàng)建的課程。包含名字性別年齡等學(xué)員查詢可上課程學(xué)員選課,選擇學(xué)校課程,并付款。課程價(jià)格,周期課程價(jià)格,周期課程價(jià)格,周期創(chuàng)建講師屬于北京校區(qū),屬于上海校區(qū)。 作業(yè)需求 創(chuàng)建北京、上海 2 所學(xué)校 創(chuàng)建linux , python , go 3個(gè)課程,linuxpy在北京開, go 在上海開 課程包含,周期,價(jià)格,通過(guò)學(xué)校創(chuàng)建課程 通過(guò)學(xué)校...
摘要:需要對(duì)每個(gè)用戶的每個(gè)內(nèi)容對(duì)象維護(hù)一個(gè)數(shù)據(jù)結(jié)構(gòu)。并沒(méi)有直接和相連,所以是將數(shù)據(jù)由暫存的內(nèi)存中取出。采用實(shí)現(xiàn)的可用進(jìn)行數(shù)據(jù)提交。記錄的完成情況,包括未嘗試未學(xué)習(xí)未完成,已完成。 簡(jiǎn)介 SCORM定義了一個(gè)網(wǎng)絡(luò)化學(xué)習(xí)的內(nèi)容聚合模型(Content Aggregaion Model)和學(xué)習(xí)對(duì)象的實(shí)時(shí)運(yùn)行環(huán)境(Run-time Environment)。簡(jiǎn)單說(shuō),它是為了滿足對(duì)網(wǎng)絡(luò)化學(xué)習(xí)內(nèi)容的高水...
摘要:不過(guò),蘋果實(shí)驗(yàn)室作為計(jì)算機(jī)學(xué)院的學(xué)習(xí)類組織,撰寫此貼的內(nèi)容集中于本科期間學(xué)習(xí)路線的宏觀規(guī)劃建議。其中主要問(wèn)題大概是初入大學(xué)的迷茫與美好大學(xué)愿景之間的矛盾自主學(xué)習(xí)能力的欠缺與遠(yuǎn)大志向的矛盾。 ...
閱讀 2833·2021-11-25 09:43
閱讀 2477·2021-10-09 09:44
閱讀 2801·2021-09-22 15:49
閱讀 2567·2021-09-01 11:43
閱讀 2541·2019-08-30 14:16
閱讀 465·2019-08-29 17:24
閱讀 3020·2019-08-29 14:00
閱讀 1384·2019-08-29 13:05