給朋友講東西的時候偶然想起了自己的程序設(shè)計作業(yè)县习,當時分數(shù)還可以作谚,決定把代碼放上來可以給學(xué)弟學(xué)妹一個參考。
以下為實驗報告內(nèi)容段审,代碼準備放到github上面,當時寫的不一定好可能會有bug闹蒜,僅供參考寺枉。
地址:https://github.com/x-Arte/Homework/tree/master/year1%20Foundations%20of%20Program%20Design
終于補上了... 我給忘了
一. 功能描述
Part1 新建
在程序開始時自動創(chuàng)建表格,可一次性輸入多個學(xué)科及其名稱绷落,和多個學(xué)生成績姥闪。
Part2 輸入數(shù)據(jù)
本部分包括三個功能,插入學(xué)生數(shù)據(jù)砌烁,刪除學(xué)生數(shù)據(jù)筐喳,添加科目。
插入學(xué)生數(shù)據(jù)
輸入新增的學(xué)生數(shù)目函喉,和想插入的學(xué)生隊列的前一位學(xué)生的序號避归,并輸入新學(xué)生的全部成績。
刪除一位學(xué)生數(shù)據(jù)
支持輸入學(xué)生隊列序號的刪除和輸入姓名的刪除管呵,但在有重名情況時僅會刪除在隊列中第一位擁有此姓名的學(xué)生梳毙。
添加科目
支持一次性添加多個科目,但科目數(shù)量不會超過上限捐下。輸入添加的科目基本信息后账锹,會自動循環(huán)每位已有的學(xué)生,進行新添加的科目成績輸入坷襟。
Part3 計算數(shù)據(jù)
本部分包括兩個功能奸柬,計算學(xué)生平均分和計算科目平均分
計算學(xué)生平均分
根據(jù)學(xué)生參加考試的考試科目數(shù)量進行平均分計算,沒有參加考試的科目不會參與計算婴程。若學(xué)生沒有參加考試廓奕,則會輸出沒有參加考試。
支持根據(jù)學(xué)生在學(xué)生隊列中的序號或者學(xué)生姓名進行計算排抬,在根據(jù)姓名計算時所有的重名學(xué)生按照在隊列中的排序順序進行平均分輸出懂从。
計算科目平均分
輸入科目名稱并計算參加考試的學(xué)生平均分授段,不會包含沒有參加考試的學(xué)生的成績蹲蒲。若沒有學(xué)生參加考試,則會輸出沒有學(xué)生參加考試
Part4 搜索數(shù)據(jù)
可以根據(jù)學(xué)生在學(xué)生隊列中的序號或者學(xué)生姓名進行查找并輸出該學(xué)生的成績侵贵,在根據(jù)姓名搜索時所有的重名學(xué)生按照在隊列中的排序順序進行輸出届搁。
Part5 輸出全部數(shù)據(jù)
以表格形式輸出全部數(shù)據(jù),學(xué)生沒有參與考試用“x”代替,同時會輸出所有學(xué)生的平均分和所有科目的平均分卡睦,平均分計算規(guī)則與Part2相同宴胧。
備注:
1. 具有合理報錯和循環(huán)輸入的功能,但仍有部分錯誤不支持識別表锻,在輸入數(shù)據(jù)時盡量按照提示輸入恕齐。
2. 支持任意人數(shù)儲存,但限制科目的數(shù)量瞬逊,限制的科目數(shù)量可以在程序預(yù)處理部分更改显歧。
3. 學(xué)生姓名和科目名稱均有長度限制,最大長度可以在程序預(yù)處理部分更改确镊。
4. 學(xué)生成績輸入不支持輸入字母士骤,也沒有分辨字母功能,盡量輸入正確蕾域。(報錯隨緣
5. 學(xué)生成績輸入負數(shù)代表沒有參加本學(xué)科考試拷肌。
6. 支持新建及后期操作時增加任意數(shù)目學(xué)生數(shù)據(jù)。
7. 插入學(xué)生數(shù)據(jù)時支持插入學(xué)生隊列的任意位置旨巷。
8. 不支持更改已輸入的數(shù)據(jù)巨缘。
9. 僅支持同時刪除一位學(xué)生,支持按照所排位置和學(xué)生姓名進行刪除采呐。
10. 支持學(xué)生重名带猴,在選擇輸出時會一次性輸出所有相同姓名學(xué)生信息。
11. 輸出學(xué)生一功能可能出現(xiàn)任意成績?yōu)槿我庳摂?shù)懈万,均代表學(xué)生未參加此考試拴清。
函數(shù)介紹
本程序共使用了21自定義個函數(shù)+main函數(shù),自定義函數(shù)列表如下会通。
1. void welcome();
功能:輸出歡迎詞口予。
2. void setting(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:新建并初始化鏈表。
3. void add_sub(int* sub_n, char* sub_name[]);
功能:一次性添加多個科目涕侈。
4. student_data* add_stu(int flag, int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:一次性添加多個學(xué)生沪停。
5. student_data* search_stu(int flag, student_data* p0);//number
功能:根據(jù)學(xué)生在隊列中的序號查找儲存學(xué)生信息的節(jié)點,并返回指向這個節(jié)點的指針裳涛,沒有找到則返回NULL木张。
6. student_data* search_stu_name(int* stu_n,char this_name[], student_data* p0);//name
功能:根據(jù)學(xué)生姓名查找儲存學(xué)生信息的節(jié)點,并返回指向這個節(jié)點的指針端三,沒有找到則返回NULL舷礼。
7. int search_sub_name(char this_name[], char* sub_name[], int* sub_n);
功能:根據(jù)學(xué)科姓名查找學(xué)科在學(xué)科隊列中的序號,并返回序號郊闯,沒有找到則? ? ? 返回-1妻献。
8. void new_student(int* sub_n, char* sub_name[], student_data* p);
功能:在已給的指針指向的節(jié)點中填入當前一個新學(xué)生的數(shù)據(jù)蛛株。
9. void enter_stu_name(char this_name[]);
功能:填入當前學(xué)生的姓名。
10. void enter_sub_name(char sun_name[]);
功能:填入當前學(xué)生的姓名育拨。
注:與上一個函數(shù)的區(qū)別為提示不同谨履。
11. void print_main_menu();
功能:輸出主菜單
12. void input_data(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:輸出“輸入數(shù)據(jù)”的次菜單,并根據(jù)選擇進行不同函數(shù)的調(diào)用并輸出結(jié)果熬丧。
13. void insert_stu(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:在已有的學(xué)生隊列中插入新的不限數(shù)量的學(xué)生數(shù)據(jù)笋粟。
14. void delete_stu(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:根據(jù)用戶的選擇進行輸入學(xué)生隊列序號的刪除或輸入姓名的刪除。
15. void deleting(student_data* p);//delete next
功能:刪除所給指針的下一個數(shù)據(jù)析蝴。
16. void more_subject(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:在已有的科目后添加新的不超過限制的多個學(xué)科矗钟,并輸入學(xué)生在這些科目中的成績。
17. void calculate(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:輸出“計算數(shù)據(jù)”的次菜單嫌变,并根據(jù)選擇進行不同函數(shù)的調(diào)用并輸出結(jié)果吨艇。
18. double calculate_average_stu(int* sub_n, student_data* p);
功能:計算所給指針的指向的學(xué)生的平均成績,不包含學(xué)生未參加考試腾啥。
19. double calculate_average_sub(int* stu_n, int n, student_data* p0);
功能:計算所給序號的科目的平均成績东涡,不包含學(xué)生未參加考試。
20. void print_stu_data(int* sub_n, char* sub_name[], student_data* p);
功能:輸出所給指針的指向的學(xué)生的成績倘待。
21. void print_all_data(int* stu_n, int* sub_n, char* sub_name[], student_data* p0);
功能:以表格形式輸出所有學(xué)生的成績及各個科目的平均分疮跑。