考試報(bào)名系統(tǒng)是一個(gè)學(xué)校不可缺少的部分,它對(duì)于學(xué)校的管理者和學(xué)生來說都至關(guān)重要,所以一個(gè)良好的考試報(bào)名系統(tǒng)應(yīng)該能夠?yàn)橛脩籼峁┏渥愕男畔⒑凸δ堋?荚噲?bào)名系統(tǒng)對(duì)于學(xué)校加強(qiáng)考試管理有極其重要的作用。隨著學(xué)生數(shù)量和考試數(shù)量的日益龐大,如何管理如此龐大的數(shù)據(jù)顯得極為復(fù)雜,傳統(tǒng)的手工管理工作量大且容易出錯(cuò)。
從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、域名與空間、網(wǎng)絡(luò)空間、網(wǎng)絡(luò)營(yíng)銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。隨著計(jì)算機(jī)科學(xué)技術(shù)的不斷成熟,使用計(jì)算機(jī)對(duì)考試報(bào)名系統(tǒng)進(jìn)行管理,具有手工管理所無法比擬的優(yōu)勢(shì)。這些優(yōu)點(diǎn)能夠極大地提高學(xué)校和學(xué)生的效率,也是學(xué)校走向信息化、科學(xué)化、國(guó)際化的重要條件。因此,開發(fā)一套考試報(bào)名系統(tǒng)具有十分重要的意義。
1.2 功能分析作為一個(gè)最簡(jiǎn)易的考試報(bào)名系統(tǒng),首先應(yīng)該有的功能就是輸入同學(xué)們的考試報(bào)名情況并且可以予以顯示。
其次,考試報(bào)名系統(tǒng)還應(yīng)該具有插入、刪除、修改功能,以保證同學(xué)可以隨時(shí)更改自己的考試報(bào)名情況。最后,考試報(bào)名系統(tǒng)軟件還應(yīng)該確保軟件可以正常關(guān)閉,以及如果用戶輸入的數(shù)據(jù)有問題的時(shí)候可以做出簡(jiǎn)單的檢查和提示。
綜上所述,一個(gè)考試報(bào)名系統(tǒng)至少應(yīng)該具有輸入、輸出、插入、刪除、修改、退出、健壯性的檢測(cè)等功能。
2. 設(shè)計(jì) 2.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)如上功能分析所述,該系統(tǒng)要求頻繁的插入、刪除、修改操作,而鏈表進(jìn)行插入、刪除等操作十分簡(jiǎn)便,因此考慮使用鏈表數(shù)據(jù)結(jié)構(gòu)。同時(shí),為了實(shí)現(xiàn)簡(jiǎn)易,在第一個(gè)結(jié)點(diǎn)之前附加一個(gè)頭結(jié)點(diǎn),并用頭指針指向頭結(jié)點(diǎn),使得增加或者刪除頭結(jié)點(diǎn)與處理其他結(jié)點(diǎn)方法相同,使得程序簡(jiǎn)潔,更方便單鏈表的前插法的設(shè)計(jì),也不需要將第一個(gè)和最后一個(gè)結(jié)點(diǎn)做特殊處理。
2.2 類結(jié)構(gòu)設(shè)計(jì)經(jīng)典的鏈表一般包括兩個(gè)抽象數(shù)據(jù)類型(ADT)——鏈表結(jié)點(diǎn)類(NODE)與鏈表類(LinkList),而兩個(gè)類之間的耦合關(guān)系可以采用嵌套、繼承等多種關(guān)系。為方便處理,本系統(tǒng)將鏈表類(LinkList)聲明為鏈表結(jié)點(diǎn)類(NODE)的友元,這樣使得鏈表結(jié)點(diǎn)類(LinkList)可以訪問鏈表結(jié)點(diǎn)。
同時(shí)將考生的信息封裝到 Stu 結(jié)構(gòu)體中,使得結(jié)點(diǎn)類的定義更簡(jiǎn)潔,更方便插入、刪除、修改等功能。
2.3 成員與操作設(shè)計(jì)考生信息類(Stu)
公有成員:
int _ExamNum; //準(zhǔn)考證號(hào)
string _name; //姓名
string _sex; //性別
int _age; //年齡
string _AppCate; //報(bào)考類別
考生信息的構(gòu)造函數(shù):
Stu() = default; //默認(rèn)構(gòu)造函數(shù)
Stu(const int ExamNum, const string &name, const string &sex,
const int age, const string &AppCate); //新考生信息的構(gòu)造函數(shù)
Stu::Stu(const int ExamNum, const string &name, const string &sex,
const int age, const string &AppCate)
:_ExamNum(ExamNum),_name(name),_sex(sex),_age(age),_AppCate(AppCate) {}
鏈表結(jié)點(diǎn)類(NODE)
私有成員:
Stu data; //封裝考生信息于變量data
NODE *next; //指針域,用于指向下一結(jié)點(diǎn)信息
友元:
friend class LinkList; //將LinkList類聲明為NODE類的友元
//使得LinkList可以訪問結(jié)點(diǎn)類的私有成員
//而其他地方不可以方位節(jié)點(diǎn)類,防止對(duì)數(shù)據(jù)的誤處理
鏈表類(LinkList)
私有成員:
NODE * head = NULL; //頭指針, 指向頭結(jié)點(diǎn)
int _size = 0; //鏈表中有效信息的數(shù)量
公有操作:
LinkList() = default; //默認(rèn)構(gòu)造函數(shù)
LinkList(int size); //指定長(zhǎng)度的鏈表構(gòu)造函數(shù)
~LinkList(); //析構(gòu)函數(shù): 用于銷毀鏈表中所有結(jié)點(diǎn)
void InitLink(); //用于已經(jīng)構(gòu)建好的鏈表的數(shù)據(jù)填充
void OutputLink(); //打印考生信息表
void DestroyLink(); //從頭結(jié)點(diǎn)開始銷毀鏈表中所有結(jié)點(diǎn)
bool FindLink(int num, Stu &buf);
//尋找考生號(hào)為num的考生信息,如果找到儲(chǔ)存到buf中, 否則返回false
void InsertLink(int index, bool flag);
//flag用于標(biāo)識(shí)前插法和后插法, 在index位置的(前或后)插入考生信息
bool DeleteLink(int num, Stu &buf);
//刪除考生號(hào)為num的考生信息, 如果存在該考生則儲(chǔ)存到buf中
void ChangeLink(int num);
//修改考生號(hào)為num的考生信息, 否則輸出相應(yīng)的信息提示
2.4 系統(tǒng)設(shè)計(jì)系統(tǒng)首先調(diào)用 StuSystem()函數(shù)實(shí)現(xiàn)對(duì)屏幕的初始化,完成對(duì)鏈表 list 的創(chuàng)建和輸入數(shù)據(jù)工作,然后根據(jù)用戶所輸入的操作碼(operatorCode)執(zhí)行鏈表 list 對(duì)應(yīng)的成員函數(shù)。
3. 實(shí)現(xiàn) 3.1 插入功能的實(shí)現(xiàn) 3.1.1 插入功能流程圖3.1.2 插入功能核心代碼用戶輸入插入位置部分
while (index<0 || index>this->_size)
//如果插入的位置非法, 則終止程序
{
cerr<< "插入位置非法!\n";
cerr<< "請(qǐng)重新輸入: ";
cin >>index;
}
初始化 move 結(jié)點(diǎn)部分
NODE *move = (flag == BACK ? head->next : head);
//后插法初始化為首結(jié)點(diǎn); 前插法初始化為頭結(jié)點(diǎn),用move->next指向鏈表的每個(gè)結(jié)點(diǎn)
插入部分
for (int i=1; (flag == BACK ? move : move->next) != NULL; move = move->next,++i)
{
if (i == index)
{
NODE *fresh = new NODE;
if (!fresh)
{
cerr<< "Memory Alloction Error!\n";
exit(-1);
}
cout<< "請(qǐng)依次輸入考生的考號(hào), 姓名, 性別, 年齡及報(bào)考類型: "<< endl;
cin >>fresh->data._ExamNum >>fresh->data._name >>fresh->data._sex
>>fresh->data._age >>fresh->data._AppCate;
//將新結(jié)點(diǎn)鏈到鏈表上
fresh->next = move->next;
move->next = fresh;
break;
}
}
3.1.3 插入功能截屏示例if (!FindLink(num, buf))
//如果不存在該結(jié)點(diǎn), 返回false
{
return false;
}
NODE *move = head;
//因?yàn)樾枰@取刪除結(jié)點(diǎn)的前一個(gè)結(jié)點(diǎn), 所以move只能指向頭結(jié)點(diǎn)
NODE *save;
for (; move->next != NULL; move = move->next)
{
if (move->next->data._ExamNum == num)
{
save = move->next; //儲(chǔ)存要?jiǎng)h除的結(jié)點(diǎn)
buf = save->data;
move->next = move->next->next;
//將前一個(gè)結(jié)點(diǎn)鏈接到后一個(gè)結(jié)點(diǎn)上
//釋放被刪除的空間
delete save;
save = NULL;
break;
}
}
3.2.3 刪除功能截屏示例NODE *move = head->next;
//用move指向每一個(gè)鏈表的結(jié)點(diǎn), 初始化為首結(jié)點(diǎn)
for (; move != NULL; move = move->next)
{
if (move->data._ExamNum == num)
{
buf = move->data;
return true;
}
}
return false;
3.3.3 查找功能截圖示例3.4 修改功能的實(shí)現(xiàn)
3.4.1 修改功能流程圖3.4.2 修改功能核心代碼Stu buf;
if (!FindLink(num, buf))
//如果不存在該結(jié)點(diǎn), 則輸出提示信息, 返回調(diào)用函數(shù)
{
printf("未找到該考生號(hào)!");
return;
}
NODE *move = head->next;
for (; move != NULL; move = move->next)
{
if (move->data._ExamNum == num)
{
cout<< "請(qǐng)依次輸入修改后的考號(hào), 姓名, 性別, 年齡及報(bào)考類型: "<< endl;
cin >>move->data._ExamNum >>move->data._name >>move->data._sex
>>move->data._age >>move->data._AppCate;
break;
}
}
3.4.3 修改功能截屏示例3.5 統(tǒng)計(jì)功能的實(shí)現(xiàn)
3.5.1 統(tǒng)計(jì)功能流程圖3.5.2 統(tǒng)計(jì)功能核心代碼NODE *move = head->next;
if (this->_size == 0)
{
cout<< "考生信息為空!\n";
return;
}
NODE *move = head->next;
//用move指向每一個(gè)鏈表的結(jié)點(diǎn), 初始化為首結(jié)點(diǎn)
printf("\n考號(hào) 姓名 性別 年齡 報(bào)考類型\n");
for (; move != NULL; move = move->next)
{
printf("%-7d%-7s%-7s%-7d%-7s\n", move->data._ExamNum, move->data._name.c_str(),
move->data._sex.c_str(), move->data._age, move->data._AppCate.c_str());
//指定字段寬度打印信息
}
3.5.3 統(tǒng)計(jì)功能截屏示例3.6 總體系統(tǒng)的實(shí)現(xiàn)
3.6.1 總體系統(tǒng)流程圖3.6.3 總體系統(tǒng)截屏示例4. 測(cè)試
4.1 功能測(cè)試
4.1.1 插入功能測(cè)試前插法測(cè)試用例:4 stu4 女 21 軟件測(cè)試師
預(yù)期結(jié)果:
實(shí)驗(yàn)結(jié)果
后插法測(cè)試用例:5 stu5 女 19 軟件開發(fā)師
預(yù)期結(jié)果:
實(shí)驗(yàn)結(jié)果
4.1.2 刪除功能測(cè)試測(cè)試用例:刪除考號(hào)為 4 的考生
預(yù)期結(jié)果:
實(shí)驗(yàn)結(jié)果:
4.1.3 查找功能測(cè)試測(cè)試用例:查找考號(hào)為 5 的考生
預(yù)期結(jié)果:
stu5 女 19 軟件開發(fā)師
實(shí)驗(yàn)結(jié)果:
4.1.4 修改功能測(cè)試測(cè)試用例:將考號(hào) 1 修改為性別女,年齡 20,報(bào)考種類移動(dòng)開發(fā)員。
預(yù)期結(jié)果:
stu1 女 20 移動(dòng)開發(fā)員
實(shí)驗(yàn)結(jié)果:
4.1.5 統(tǒng)計(jì)功能測(cè)試測(cè)試用例:統(tǒng)計(jì)當(dāng)前數(shù)據(jù)
預(yù)期結(jié)果:
實(shí)驗(yàn)結(jié)果:
4.2 邊界測(cè)試 4.2.1 初始化無輸入數(shù)據(jù)測(cè)試用例:考生人數(shù)分別輸入-1, 0, 3
預(yù)期結(jié)果:給出錯(cuò)誤提示,程序運(yùn)行正常不崩潰,并提示用戶重新輸入。
實(shí)驗(yàn)結(jié)果:
4.2.2 刪除頭結(jié)點(diǎn)測(cè)試用例:刪除頭結(jié)點(diǎn)
預(yù)期結(jié)果:程序正常運(yùn)行,不崩潰。
實(shí)驗(yàn)結(jié)果:
4.2.3 刪除后鏈表為空測(cè)試用例:刪除前鏈表只有一個(gè)結(jié)點(diǎn),刪除后鏈表為空
預(yù)期結(jié)果:程序正常運(yùn)行,不崩潰。
實(shí)驗(yàn)結(jié)果:
4.3 出錯(cuò)測(cè)試 4.3.1 考生人數(shù)錯(cuò)誤測(cè)試用例:輸入考生人數(shù)為負(fù)數(shù)
預(yù)期結(jié)果:程序給出提示信息,程序正常運(yùn)行不崩潰,并讓用戶繼續(xù)輸入。
實(shí)驗(yàn)結(jié)果:
4.3.2 操作碼錯(cuò)誤測(cè)試用例:輸入操作碼錯(cuò)誤
預(yù)期結(jié)果:程序給出提示信息,程序正常運(yùn)行不崩潰,并允許用戶重新輸入。
實(shí)驗(yàn)結(jié)果:
4.3.3 插入位置不存在測(cè)試用例:鏈表里有兩條記錄,向鏈表的第四個(gè)位置插入結(jié)點(diǎn)
預(yù)期結(jié)果:程序給出錯(cuò)誤信息,程序正常運(yùn)行不崩潰,并允許用戶重新輸入。
實(shí)驗(yàn)結(jié)果:
4.3.4 刪除考號(hào)不存在測(cè)試用例:要?jiǎng)h除的考號(hào)不存在
預(yù)期結(jié)果:程序給出提示信息,程序正常運(yùn)行不崩潰。
實(shí)驗(yàn)結(jié)果:
4.3.5 查找考號(hào)不存在測(cè)試用例:要查找的考號(hào)不存在
預(yù)期結(jié)果:程序給出錯(cuò)誤信息,程序正常運(yùn)行不崩潰。
實(shí)驗(yàn)結(jié)果:
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧