1. 程式人生 > >程式設計基礎(C)大作業——學籍管理系統(1)

程式設計基礎(C)大作業——學籍管理系統(1)

“第二版學籍管理系統”軟體專案的功能需求:有一個整體的系統介面選單,使用者可以在選單上選擇如下子功能:
[1]增加一個學生資料;
[2]修改一個學生資料,能以姓名或者學號,找到要修改的學生;
[3]刪除一個學生資料,能以姓名或者學號,找到要刪除的學生;
[4]對學生資料進行排序,按照班級號從小到大,同一班級內按照姓名拼音的先後順序排序;
[5]輸出全部學生資料;
[6]進行成績分析,輸出結果;
說明:成績分析要求計算成績的方差和標準差。若三個學生的總成績分別為x1,x2,x3,其均值為x,則方差計算公式如下: ((x1-x)(x1-x)+(x2-x)

(x2-x)+(x3-x)*(x3-x))/3, 標準差是方差的平方根。
[7]系統退出。
【老師竟然改需求了!成績分析還要輸出均值,為此,臨時新增一個全域性變數m_ave】

鑑於之前的想法還有很多不足,也沒有及時更新,重新按順序一點一點寫出來。
首先是把資料結構和函式與要實現的功能建立聯絡。
在final.h裡宣告出結構體和主要的函式
各種功能見程式碼中的註釋。

final.h

#include<stdio.h>
#include<stdlib.h> 
#include<malloc.h>
#include<string.h>
#define LEN sizeof(stu) #define _FILENAME_ "data.txt" //連結串列的第一項通常不用來儲存資訊 struct Student{ int id; int cls; char name[20]; float score[3]; float sum; struct Student *next; }; typedef struct Student stu; /*全域性變數宣告部分*/ int m_n;//全域性變數n,學生個數,即不包括頭的節點個數 stu *m_head; int m_ave; /*函式宣告部分*/
stu *create(); stu *sort(stu *head); /**計算方差,應包含三種格式: *1、輸入0,返回所有學生方差; *2、輸入1,輸入cls,返回該班學生的方差; *3、輸入2,然後輸入id範圍,返回方差; *by cantjie */ float varianceStu(stu *head); /** *每次刪除或更新等操作後,要把記憶體裡的資料寫入檔案,flag表示模式,為1表示追加,為0表示重寫 *put data in memory into _FILENAME_ in harddisk,used every time update or delete the data *by cantjie */ void saveStu(stu *head,int flag); /** *把檔案裡的資料讀取到記憶體中 *by cantjie */ stu *readStu(); /** *顯示學生資訊 *by cantjie */ void showStu(stu *p); /** *顯示學生資訊前顯示錶頭 *by cantjie */ void showTitle(); /** *刪除學生資訊 *傳入的引數為要刪除的學生的前一個學生的指標 *by cantjie */ void deleteStu(stu *p); /** *更新、修改學生資訊 *傳入的引數為要更改的學生的指標 *by cantjie */ void updateStu(stu *p); /** *檢查id 是否重複,如果id重複,返回1。不重複返回0 *by cantjie */ int validate(stu *head, int id); /** *通過學號或者姓名查詢學生,用在以上函式中 *返回要查詢的學生的前一個struct的指標 *by cantjie */ stu *findStu(stu *head, int id, char *name); /** *用在main函式,輸入功能後進入此函式 */ void controller(int flag); /** *let user to choose function,after printing function list *by cantjie */ void chooseFunction();