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