欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      學(xué)生檔案管理系統(tǒng)c語言[小編推薦]

      時(shí)間:2019-05-14 04:49:10下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫寫幫文庫小編為你整理了多篇相關(guān)的《學(xué)生檔案管理系統(tǒng)c語言[小編推薦]》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《學(xué)生檔案管理系統(tǒng)c語言[小編推薦]》。

      第一篇:學(xué)生檔案管理系統(tǒng)c語言[小編推薦]

      學(xué)生檔案管理系統(tǒng) 內(nèi)容與要求

      【問題描述】

      設(shè)計(jì)一個(gè)學(xué)生檔案管理系統(tǒng),對(duì)學(xué)生檔案進(jìn)行管理。每個(gè)學(xué)生的信息包括:學(xué)號(hào)、姓名、性別、出生年月、是否黨員、手機(jī)號(hào)碼、家庭住址、各門課成績(jī)(每門課包括課程名與成績(jī))。系統(tǒng)要求包含如下功能:

      1。創(chuàng)建功能:初始輸入每個(gè)學(xué)生的信息(學(xué)號(hào)、姓名、性別、出生年月、是否黨員、手機(jī)號(hào)碼、家庭住址)并保存。

      2。顯示功能:顯示全部學(xué)生的信息(包括各門課的成績(jī))。

      3。輸入某課程成績(jī)功能:按學(xué)號(hào)、成績(jī)輸入選修某門課的所有學(xué)生的成績(jī)(說明:并不是所有學(xué)生都選同一門課,每個(gè)學(xué)生選的課可不一樣)。

      4。統(tǒng)計(jì)平均成績(jī)功能:計(jì)算每個(gè)學(xué)生的平均成績(jī)。5。查找功能:按姓名或?qū)W號(hào)查找學(xué)生記錄,并顯示。6。排序功能:按學(xué)號(hào)或平均成績(jī)進(jìn)行排序,并顯示。7。插入功能:插入一條學(xué)生記錄。8。刪除功能:刪除指定學(xué)生的記錄。

      要求提供一個(gè)界面來調(diào)用各個(gè)功能,界面應(yīng)盡可能清晰美觀?!揪唧w要求】

      1。系統(tǒng)應(yīng)以菜單方式工作,舉例如下:

      程序運(yùn)行后顯示如下主界面:

      ****************************************

      1--------------創(chuàng)建

      2--------------顯示

      3--------------輸入成績(jī)

      4--------------統(tǒng)計(jì)成績(jī)

      5--------------查找

      6--------------排序

      7--------------插入

      8--------------刪除

      9--------------退出

      ****************************************

      通過選擇1-9來確定要做哪一個(gè)操作。

      若選5,則出現(xiàn)如下界面:

      ****************************************

      1----------按學(xué)號(hào)查詢

      2----------按姓名查詢

      **************************************** 2。要求采用順序存儲(chǔ)結(jié)構(gòu)存儲(chǔ)學(xué)生基本信息,每個(gè)學(xué)生的信息是一個(gè)數(shù)據(jù)元素,而其中每個(gè)學(xué)生各門課的成績(jī)用單鏈表存儲(chǔ)結(jié)構(gòu)存儲(chǔ)。【實(shí)現(xiàn)提示】

      順序表每個(gè)數(shù)據(jù)元素包括學(xué)號(hào)、姓名、性別、出生年月、是否黨員、手機(jī)號(hào)碼、家庭住址、成績(jī)鏈表的頭指針;成績(jī)鏈表每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域包括課程名與成績(jī)。

      【測(cè)試數(shù)據(jù)】

      自己設(shè)計(jì),報(bào)告上要求給出各種情況的數(shù)據(jù)測(cè)試結(jié)果?!緦?shí)現(xiàn)說明】

      有能力的同學(xué)在完成上述功能的基礎(chǔ)上,可以充分發(fā)揮自己的想象力增加并完善該系統(tǒng)的功能,如采用文件來存儲(chǔ)學(xué)生信息,增加輸出某門課的成績(jī)記錄單功能等等。總體設(shè)計(jì)

      一、設(shè)計(jì)步驟

      分析問題,給出數(shù)學(xué)模型,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)。

      (1)按照課程要求,可以將學(xué)生基本信息以順序存儲(chǔ)方式存放在一數(shù)組中,而學(xué)生基本信息由于有多個(gè)項(xiàng)目,可以將單個(gè)學(xué)生的信息以結(jié)構(gòu)體的方式存儲(chǔ);

      (2)輸入的成績(jī)可以在每個(gè)通過在結(jié)構(gòu)體中加入一鏈表來實(shí)現(xiàn)存儲(chǔ)多門課程的目的,為避免每插入一門課程就需要遍歷一次鏈表,此處應(yīng)以隊(duì)列的方式來存儲(chǔ)課程;

      (3)統(tǒng)計(jì)成績(jī)計(jì)算出成績(jī)之后為方便后續(xù)的顯示平均成績(jī)及排序須在每個(gè)學(xué)生的信息中再加入平均成績(jī)一項(xiàng); 二.功能模塊及調(diào)用關(guān)系說明

      (1)創(chuàng)建基本信息:通過fopen()以讀的方式打開“basedata.dat”文件,再用fscanf()將文檔中的基本信息存儲(chǔ)到p1數(shù)組中;

      (2)顯示學(xué)生信息:可以通過遍歷數(shù)組p1來進(jìn)行輸出,若基本信息為空,則提示先創(chuàng)建信息,若學(xué)生課程信息未存入則不進(jìn)行顯示,若課程信息已存入,則在遍歷數(shù)組的基礎(chǔ)上再對(duì)每個(gè)數(shù)組元素中的鏈表進(jìn)行遍歷輸出;

      (3)輸入成績(jī):先輸入課程代號(hào),通過strcmp()字符串比較判斷再同(1)打開相應(yīng)文件并將信息寫入一中間變量里,再通過中間變量中寫入的學(xué)號(hào)查找到該學(xué)生,并將這條課程信息用EnQueue()存到該學(xué)生的課程鏈表中,若該課程已存在與該學(xué)生的課程鏈表中則不進(jìn)行重復(fù)寫入,其中用isExitcNo()判斷是否存在該課程;

      (4)統(tǒng)計(jì)成績(jī):通過遍歷每個(gè)學(xué)生的課程鏈表計(jì)算并存儲(chǔ)每個(gè)學(xué)生的平均成績(jī),若未錄入基本信息則提示先創(chuàng)建基本信息,若課程鏈表為空,則提示先輸入成績(jī);

      (5)查找:1.按學(xué)號(hào)查詢:建立一個(gè)for循環(huán),通過輸入的學(xué)號(hào)找到相應(yīng)的學(xué)生,并輸出該學(xué)生的信息,2.按姓名查詢:建立一個(gè)for循壞,通過輸入的姓名找到相應(yīng)學(xué)生,并輸出該學(xué)生的信息,若并未創(chuàng)建基本信息,則提示先創(chuàng)建基本信息;

      (6)排序:1.按學(xué)號(hào)排序:先將學(xué)號(hào)用sscanf()轉(zhuǎn)化為int型,再用插入排序法對(duì)數(shù)組進(jìn)行排序;

      2.按平均成績(jī)排序:利用插入排序法對(duì)數(shù)組元素中的平均值比較從而對(duì)數(shù)組進(jìn)行排序;

      若并未創(chuàng)建基本信息,則提示先創(chuàng)建基本信息;(7)插入:

      先輸入一個(gè)學(xué)號(hào),用isNo()判斷輸入的是否為數(shù)字,若輸入的并不為數(shù)字,則提示其重新輸入,輸入學(xué)號(hào)后,若該學(xué)號(hào)已經(jīng)存在,則提示重新輸入;

      在學(xué)號(hào)輸入正確無誤的前提下,再輸入姓名,再輸入性別,用isGender()判斷輸入的是否是性別,若不為性別,則提示重新輸入,再輸入出生日期,用isNo判斷是否為數(shù)字,若不為數(shù)字則提示重新輸入,再輸入是否為黨員用isYN()判斷格式是否正確,若格式錯(cuò)誤則提示重新輸入,再輸入手機(jī)號(hào)碼,并用isNo()判斷是否為數(shù)字,若不為數(shù)字則提示重新輸入,最后再輸入地址; 學(xué)生基本信息輸入完成后再輸入課程信息,課程信息記錄到數(shù)組元素的課程鏈表中;

      輸入完成后再用InsertFile()將學(xué)生信息寫回到學(xué)生基本信息文檔及課程文檔中;

      (8)刪除:

      若學(xué)生信息為空,則提示先創(chuàng)建學(xué)生信息,學(xué)生信息不為空,則輸入學(xué)號(hào),再通過輸入的學(xué)號(hào)查找到相應(yīng)的學(xué)生并刪除數(shù)組中該條學(xué)生信息,若無法找到該學(xué)號(hào)則提示無該學(xué)生,要求其重新輸入;

      刪除成績(jī)后再用reWFile()將數(shù)組中的信息重新寫回到學(xué)生基本信息文檔及課程文檔中;

      (9)退出程序。詳細(xì)設(shè)計(jì) 1)實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu) struct student{ char No[10];

      char name[10];

      //學(xué)生信息 //學(xué)生學(xué)號(hào) //學(xué)生姓名

      char gender[5];//學(xué)生性別

      char brithday[8];//學(xué)生生日

      char tpartym[5];//是否為黨員

      char phoneNo[15];//手機(jī)號(hào)碼

      char addr[20];

      //學(xué)生地址

      courses *front;//學(xué)生課程隊(duì)列的隊(duì)首

      courses *rear;int average;} struct courses{ char cNo[15];char sNo[10];int degree;

      //課程信息 //課程代號(hào) //課程中學(xué)生學(xué)號(hào) //相應(yīng)學(xué)號(hào)學(xué)生的成績(jī) //學(xué)生課程隊(duì)列的隊(duì)首 //學(xué)生所有課程的平均成績(jī)

      courses *next;} 2)函數(shù)的算法實(shí)現(xiàn)

      (1)InitQueue(student &Q)函數(shù)的實(shí)現(xiàn)(初始化隊(duì)列)

      形參為隊(duì)列名稱;在函數(shù)中將用new生成新的節(jié)點(diǎn),并將隊(duì)頭和對(duì)位指向此節(jié)點(diǎn),再將頭節(jié)點(diǎn)的指針域置空。

      (2)EnQueue(student &Q,courses e)入隊(duì)函數(shù)的實(shí)現(xiàn)

      形參一個(gè)為隊(duì)列名稱,另一個(gè)為插入元素;先為入隊(duì)元素分配節(jié)點(diǎn)空間并用指針p指向該節(jié)點(diǎn),再將節(jié)點(diǎn)的數(shù)據(jù)域置為e然后將新節(jié)點(diǎn)插入到隊(duì)尾并修改隊(duì)尾指針,使隊(duì)尾指針指向下一個(gè)節(jié)點(diǎn)。

      (3)GetLine(student Q)輸出隊(duì)列函數(shù)的實(shí)現(xiàn)

      形參為隊(duì)列名稱;先設(shè)一個(gè)中間變量r作為節(jié)點(diǎn)指針,當(dāng)對(duì)首與隊(duì)尾相等時(shí),即隊(duì)列為空,則提示課程信息為空,當(dāng)對(duì)列不為空時(shí),將r賦值為隊(duì)首所指向的指針域,在while循環(huán)中當(dāng)r不為空時(shí)分別輸出課程名稱及對(duì)應(yīng)課程的成績(jī),再將r指向下一個(gè)節(jié)點(diǎn),當(dāng)r為空時(shí)即遍歷對(duì)列完成則結(jié)束循環(huán)。

      (4)CalculateAve(student &Q)計(jì)算平均成績(jī)的實(shí)現(xiàn) 形參為隊(duì)列名稱,即為單個(gè)數(shù)組元素;設(shè)置一個(gè)變量n并置初值為0用于課程數(shù)的計(jì)數(shù),設(shè)一個(gè)中間變量r作為節(jié)點(diǎn)指針,將r賦值為隊(duì)首所指向的指針域,在while循環(huán)中當(dāng)r不為空時(shí)將每門課程成績(jī)相加,加完所有成績(jī)之后再將總成績(jī)除以課程數(shù)并將所得平均成績(jī)賦值給數(shù)組元素。

      (5)isExitcNo(student Q,char *cNo)判斷該課程是否存在于數(shù)組元素隊(duì)列中

      設(shè)一個(gè)flag做為標(biāo)志值設(shè)置初值為0,在for循環(huán)中對(duì)每個(gè)數(shù)組元素進(jìn)行遍歷,在循環(huán)過程中用strcmp()將該數(shù)組元素中已有課程代號(hào)與輸入課程代號(hào)進(jìn)行比較,若有相等的課程,則將flag值置為1,并直接結(jié)束循環(huán),最后返回flag(6)isNo(char *No)判斷是否為數(shù)字

      若字符串全為數(shù)字,則函數(shù)返回1,若字符串中有一個(gè)不為數(shù)字,則返回0.(7)isGender(char *gender)判斷是否為性別

      若字符串判斷為“男“或”女“,則函數(shù)返回1,反之則返回0.(8)InsertFile(student Q)插入文件

      將文件用fopern()以添加的方式打開,用fprintf()將插入的信息寫入文件(9)reWFile(student *p1,int i)寫回文件

      將文件用fopen()以寫的方式打開,用fprintf()將刪除信息后的數(shù)組重新寫回到文件中

      3)創(chuàng)建基本信息的算法實(shí)現(xiàn)

      先用fopen()以讀方式打開學(xué)生基本信息文檔,并將返回地址賦值給文件指針型變量fp,若打開文件錯(cuò)誤則提示文件打開錯(cuò)誤,用feof()判斷是否為文件結(jié)尾,用fscanf()將文檔中讀出的信息賦值分別賦值給p1[i]中的各項(xiàng)數(shù)據(jù)項(xiàng),用fscanf()!=EOF防止讀入文件中的回車空白行,讀入信息后用isExistNo()判斷該學(xué)號(hào)是否已經(jīng)存在,若存在則不讀入該行信息,若不重復(fù)則用InitQueue()初始化每個(gè)數(shù)組元素的隊(duì)列,讀完所有信息后提示創(chuàng)建成功并用fclosef()關(guān)閉前面打開的基本信息文件; 4)顯示學(xué)生信息的算法實(shí)現(xiàn)

      先通過判斷數(shù)組長(zhǎng)度i來判斷學(xué)生信息數(shù)組是否為空,若i為0,即數(shù)據(jù)為空,則提示“信息為空,請(qǐng)先創(chuàng)建基本信息“,若數(shù)據(jù)不為空,則利用for循環(huán)對(duì)每個(gè)數(shù)組元素的數(shù)據(jù)信息進(jìn)行輸出,分別輸出p1[j].No,p1[j].name,p1[j].gender p1[j].brithday,p1[j].phoneNo,p1[j].tpartym,p1[j].addr,再在每次循環(huán)中用GetLine(p1[j])對(duì)該學(xué)生的各門課程名及成績(jī)進(jìn)行輸出;若還未存儲(chǔ)成績(jī)則 不對(duì)課程成績(jī)進(jìn)行輸出; 5)輸入成績(jī)的算法實(shí)現(xiàn) 先通過判斷數(shù)組長(zhǎng)度i來判斷學(xué)生信息數(shù)組是否為空,若i為0,即數(shù)據(jù)為空,則提示“請(qǐng)先創(chuàng)建基本信息”,若數(shù)據(jù)不為空,先定義一個(gè)courses類型的中間變量e,并將e的next指針域設(shè)置為空,之后輸入課程代號(hào),將輸入的課程代號(hào)存入e.cNo中,在通過strcmp(_)去與已知的課程代號(hào)相比較,找到滿足條件的課程代號(hào)后用fopen()打開對(duì)應(yīng)的課程文件并將文件地址賦值給fp1,打開文件后用fscanf()將文件中的數(shù)據(jù)賦值給e.sNo,e.degree,賦值完成后通過e.sNo找到對(duì)應(yīng)的數(shù)組元素,并用isExitcNo()判斷該門課程是否存在于該數(shù)組元素的隊(duì)列中,若不存在則用EnQueue(p1[j],e)將該課程的信息存入數(shù)組元素的隊(duì)列中,若已經(jīng)存在該門課程的信息,則不將該課程信息存入數(shù)組元素的隊(duì)列中,存入所有成績(jī)完成后用fclose(fp1)關(guān)閉相應(yīng)的文件; 6)統(tǒng)計(jì)成績(jī)的算法實(shí)現(xiàn)

      先通過判斷數(shù)組長(zhǎng)度i來判斷學(xué)生信息數(shù)組是否為空,若i為0,即數(shù)據(jù)為空,則提示“請(qǐng)先創(chuàng)建基本信息“,若數(shù)據(jù)不為空,則通過建立一個(gè)for循環(huán),在循環(huán)過程中先判斷成績(jī)信息是否為空,若成績(jī)信息為空則提示先輸入成績(jī),反之則用CalculateAve(p1[j])計(jì)算每個(gè)學(xué)生所有課程成績(jī)的平均值,并將函數(shù)返回值賦值給p1[j].average;7)查找學(xué)生信息的算法實(shí)現(xiàn)

      先通過判斷數(shù)組長(zhǎng)度i來判斷學(xué)生信息數(shù)組是否為空,若i為0,即數(shù)據(jù)為空,則提示“請(qǐng)先創(chuàng)建基本信息”,若數(shù)據(jù)不為空,通過輸入一選擇值來選擇進(jìn)行學(xué)號(hào)搜索或按姓名搜索,若該值為1,先輸入一個(gè)學(xué)號(hào)存儲(chǔ)于r中,再通過建立一個(gè)for循環(huán)來對(duì)數(shù)組進(jìn)行遍歷(設(shè)立一個(gè)flag值用于判斷是否能找到該條學(xué)生信息,flag初值定為0),每次循環(huán)將數(shù)組元素中的學(xué)號(hào)與r進(jìn)行比較,若學(xué)號(hào)相等,則對(duì)該學(xué)生的信息進(jìn)行輸出,并將flag賦值為1,若結(jié)束循環(huán)后flag值仍為0,即數(shù)組中無該條學(xué)生的信息,則提示“查無此人”

      若選擇值為2則先輸入一個(gè)姓名存儲(chǔ)于r中,再通過建立一個(gè)for循環(huán)來對(duì)數(shù)組進(jìn)行遍歷(設(shè)立一個(gè)flag值用于判斷是否能找到該條學(xué)生信息,flag初值定為0),每次循環(huán)將數(shù)組元素中的姓名與r進(jìn)行比較,若相等,則對(duì)該學(xué)生的信息進(jìn)行輸出,并將flag賦值為1,若結(jié)束循環(huán)后flag值仍為0,即數(shù)組中無該條學(xué)生的信息,則提示“查無此人” 8)排序的算法實(shí)現(xiàn)

      先通過判斷數(shù)組長(zhǎng)度i來判斷學(xué)生信息數(shù)組是否為空,若i為0,即數(shù)據(jù)為空,則提示“請(qǐng)先創(chuàng)建基本信息“,若數(shù)據(jù)不為空,則通過輸入一選擇值來選擇進(jìn)行學(xué)號(hào)排序或按平均成績(jī)排序,若該值為1,則進(jìn)行按學(xué)號(hào)排序,因此處的學(xué)號(hào)為字符型,故無法直接進(jìn)行大小比較,因此需用sscanf()將字符型變量轉(zhuǎn)化為int型變量再進(jìn)行大小比較,此處以插入法排序?qū)?shù)組進(jìn)行排序

      若選擇值為2,則通過比較數(shù)組中平均值的大小對(duì)數(shù)組進(jìn)行排序,若成績(jī)信息為空則提示先輸入成績(jī),若不為空則以插入法排序?qū)?shù)組進(jìn)行排序;

      總結(jié)

      1.在一周的時(shí)間里,不斷地對(duì)程序及各模塊進(jìn)行修改、編譯、調(diào)試、運(yùn)行,其間遇到很 多問題,但通過自己的努力及詢問同學(xué)的幫助都一一解決了。2.程序是寫出來的,不是想出來的。開始階總是在想,總感覺很困難做不了,但是真正 投入其中之后才發(fā)覺其實(shí)只要用心,只要有克服一切的勇氣和信心就可以把程序做好,錯(cuò)誤總是越改越少的。

      3.要用愉悅的心情去做,從編程的過程中體會(huì)樂趣,興趣是最好的老師就是這么回事

      4.要善于利用編程軟件的調(diào)試功能調(diào)試自己的程序,通過程序的調(diào)試我發(fā)現(xiàn)并解決了許多問題

      5.通過課程設(shè)計(jì),自己通過系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一 步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的應(yīng)用。

      6.通過實(shí)踐,我也發(fā)現(xiàn)我的很多不足之處,首先是自己平時(shí)上機(jī)練習(xí)太少,知識(shí)的積壓給編程帶來了一定的麻煩。另外我對(duì)數(shù)據(jù)結(jié)構(gòu)的一些標(biāo)準(zhǔn)庫函數(shù)還不太了解,如開始進(jìn)入系統(tǒng)后發(fā)現(xiàn)操作的界面很亂,如果能夠及時(shí)的清屏那樣就會(huì)變的很明了。查閱了相關(guān)的資料和問同學(xué)后我知道只要在程序中調(diào)用庫函數(shù)system(”cls“)就可以了,知道了這個(gè)函數(shù)的基本用法;還有對(duì)數(shù)據(jù)結(jié)構(gòu)中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過實(shí)踐,使我獨(dú)自處理錯(cuò)誤的能力也有了很大的提高。

      7.編寫程序需要考慮到程序運(yùn)行的各種狀況,這樣才能使程序使用的長(zhǎng)久,不易出現(xiàn)bug。

      附錄

      [單擊此處添加程序源代碼] 主程序: #include #include #include #include #define OK 1 #define ERROR 0 typedef int Status;using namespace std;#include”test1.h“ int main(){ student p1[100];FILE *fp;int choice;int i=0;

      do{

      cout<<”*******************************************************************************“<

      cout<<”

      1--------------創(chuàng)建“<

      cout<<”

      2--------------顯示“<

      cout<<”

      3--------------輸入成績(jī)“<

      cout<<”

      4--------------統(tǒng)計(jì)成績(jī)“<

      cout<<”

      5--------------查找“<

      cout<<”

      6--------------排序“<

      cout<<”

      7--------------插入“<

      cout<<”

      8--------------刪除“<

      cout<<”

      9--------------退出“<

      cout<<”*******************************************************************************“<

      cin>>choice;

      system(”CLS“);

      switch(choice){

      case 1:{

      if(!(fp=fopen(”e:mysbasedata.dat“,”r“))){

      cout<<”打開文件錯(cuò)誤“<

      exit(0);}

      while(!feof(fp))

      if((fscanf(fp,”%s %s %s %s %s %s %s“,p1[i].No,p1[i].name,p1[i].gender,p1[i].brithday,p1[i].phoneNo,p1[i].tpartym,p1[i].addr))!=EOF){

      if(isExistNo(p1,p1[i].No,i))

      continue;

      else{

      InitQueue(p1[i]);

      i++;

      p1[i].average=0;

      }}

      if(i==0)

      cout<<”文件為空,請(qǐng)檢查文件“<

      else

      cout<<”創(chuàng)建成功“<

      fclose(fp);

      break;}

      case 2:

      if(i==0)

      cout<<”信息為空,請(qǐng)錄入信息“<

      else

      for(int j=0;j

      cout<

      p1[j].name<<” “<<

      p1[j].gender<<” “<<

      p1[j].brithday<<” “<<

      p1[j].phoneNo<<” “<<

      p1[j].tpartym<<” “<<

      p1[j].addr<

      GetLine(p1[j]);

      }

      break;

      case 3:

      if(i==0)

      cout<<”請(qǐng)先創(chuàng)建基本信息“<

      else{

      char c[10];

      FILE *fp1;

      courses e;

      e.next=0;

      //student Q;

      //InitQueue(Q);

      cout<<”請(qǐng)輸入課程代號(hào),若要返回上層請(qǐng)輸入0“<

      do{

      //cout<<”請(qǐng)輸入課程代號(hào),若要返回上層請(qǐng)輸入0“<

      cin>>c;

      if(strcmp(c,”c01“)!=0&&strcmp(c,”c02“)!=0&&strcmp(c,”c03“)!=0&&strcmp(c,”c04“)!=0&&strcmp(c, ”0“)!= 0){

      cout<<”課程代號(hào)出錯(cuò),請(qǐng)重新輸入“<

      continue;

      }

      if(strcmp(c,”c01“)==0){

      strcpy(e.cNo,”c01“);

      strcpy(e.cname,”原理基礎(chǔ)“);

      if(!(fp1=fopen(”e:mysc01.txt“,”r“))){

      cout<<”打開文件錯(cuò)誤“<

      exit(0);

      }

      else{

      while(!feof(fp1))

      if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

      for(int j=0;j

      if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

      EnQueue(p1[j],e);

      }

      }

      fclose(fp1);

      }

      else if(strcmp(c,”c02“)==0){

      strcpy(e.cNo,”c02“);

      strcpy(e.cname,”數(shù)據(jù)結(jié)構(gòu)“);

      if(!(fp1=fopen(”e:mysc02.txt“,”r“))){

      cout<<”打開文件錯(cuò)誤“<

      exit(0);}

      else{

      while(!feof(fp1))

      if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

      for(int j=0;j

      if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

      EnQueue(p1[j],e);

      }

      }

      fclose(fp1);

      }

      else if(strcmp(c,”c03“)==0){

      strcpy(e.cNo,”c03“);

      strcpy(e.cname,”數(shù)學(xué)建模“);

      if(!(fp1=fopen(”e:mysc03.txt“,”r“))){

      cout<<”打開文件錯(cuò)誤“<

      exit(0);}

      else{

      while(!feof(fp1))

      if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

      for(int j=0;j

      if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],e.cNo)==0))

      EnQueue(p1[j],e);

      }

      }

      fclose(fp1);

      }

      else if(strcmp(c,”c04“)==0){

      strcpy(e.cNo,”c04“);

      strcpy(e.cname,”微觀經(jīng)濟(jì)“);

      if(!(fp1=fopen(”e:mysc04.txt“,”r“))){

      cout<<”打開文件錯(cuò)誤“<

      exit(0);}

      else{

      while(!feof(fp1))

      if((fscanf(fp1,”%s %d“,e.sNo,&e.degree))!=EOF){

      for(int j=0;j

      if((strcmp(e.sNo,p1[j].No))==0&&(isExitcNo(p1[j],e.cNo)==0))

      EnQueue(p1[j],e);

      }

      }

      fclose(fp1);

      }

      //else

      // cout<<”請(qǐng)輸入正確的課程代號(hào)“<

      }while((strcmp(c,”0“))!=0);}

      break;

      case 4:

      if(i==0)

      cout<<”信息為空,請(qǐng)先創(chuàng)建基本信息“<

      else{

      for(int j=0;j

      cout<

      p1[j].name<<” “;

      if(!(p1[j].front->next))

      cout<<”成績(jī)?yōu)榭眨?qǐng)先輸入成績(jī)“<

      else{

      CalculateAve(p1[j]);

      cout<

      cout<

      }

      }

      break;

      case 5:

      if(i==0)

      cout<<”信息為空,請(qǐng)先創(chuàng)建信息“<

      else{

      int a;

      do{

      system(”CLS“);

      cout<<”****************************************“<

      cout<<”1----------按學(xué)號(hào)查詢“<

      cout<<”2----------按姓名查詢“<

      cout<<”0----------返回上層“<

      cout<<”****************************************“<

      cin>>a;

      system(”CLS“);

      char r[10];

      if(a==1)do{

      strcpy(r,”1“);

      int flag=0;

      cout<<”請(qǐng)輸入學(xué)號(hào),返回上層請(qǐng)按0“<

      cin>>r;

      for(int j=0;j

      if(strcmp(p1[j].No,r)==0){

      cout<

      p1[j].name<<” “<<

      p1[j].gender<<” “<<

      p1[j].brithday<<” “<<

      p1[j].phoneNo<<” “<<

      p1[j].tpartym<<” “<<

      p1[j].addr<

      GetLine(p1[j]);

      flag=1;}

      if(!flag)

      cout<<”查無此人,請(qǐng)重新輸入“<

      }while(strcmp(r,”0“)!=0);

      else if(a==2)

      do{

      strcpy(r,”1“);

      int flag=0;

      cout<<”請(qǐng)輸入姓名,返回上層請(qǐng)按0“<

      cin>>r;

      for(int j=0;j

      if(strcmp(p1[j].name,r)==0){

      cout<

      p1[j].name<<” “<<

      p1[j].gender<<” “<<

      p1[j].brithday<<” “<<

      p1[j].phoneNo<<” “<<

      p1[j].tpartym<<” “<<

      p1[j].addr<

      GetLine(p1[j]);

      flag=1;}

      if(!flag)

      cout<<”查無此人,請(qǐng)重新輸入“<

      }while(strcmp(r,”0“)!=0);

      else if(a==0)

      break;

      else{

      cout<<”請(qǐng)重新選擇“<

      system(”pause“);}

      }while(1);}

      break;

      case 6:

      if(i==0)

      cout<<”信息為空,請(qǐng)先創(chuàng)建基本信息“<

      else{

      int r;

      do{

      cout<<”****************************************“<

      cout<<”1----------按學(xué)號(hào)排序“<

      cout<<”2----------按平均成績(jī)排序“<

      cout<<”0----------返回上層“<

      cout<<”****************************************“<

      cin>>r;

      if(r==1){

      for(int k=1;k

      {

      int a,b;

      sscanf(p1[k].No,”%d“,&a);

      student temp=p1[k];//temp標(biāo)記為未排序第一個(gè)元素

      int j=k;

      元素

      sscanf(p1[j-1].No,”%d“,&b);while(j>=0&&b>a){ p1[j]=p1[j-1];j--;sscanf(p1[j-1].No,”%d“,&b);} p1[j]=temp;} for(int j=0;j

      cout<

      } } else if(r==2){ for(int k=1;k

      int a;

      a=p1[k].average;student temp=p1[k];//temp標(biāo)記為未排序第一個(gè) int j;for(j=k;j>0&&p1[j-1].average>temp.average;j--){ p1[j]=p1[j-1];} p1[j]=temp;} for(int j=0;j

      cout<

      next))

      cout<<”成績(jī)信息為空,請(qǐng)輸入該學(xué)生成績(jī)“;else{

      if(p1[j].average==0)

      cout<<”請(qǐng)先計(jì)算平均成績(jī)“;

      else

      cout<

      cout<

      }

      }

      else if(r==0)

      break;

      else{

      cout<<”請(qǐng)重新選擇“<

      system(”pause“);} }while(1);} break;case 7:{

      int a=-1;

      do{

      cout << ”請(qǐng)輸入學(xué)號(hào)“ << endl;

      while(1){

      cin >> p1[i].No;

      if(isNo(p1[i].No))

      break;

      else

      cout<<”格式錯(cuò)誤,請(qǐng)重新輸入“<

      }

      if(isExistNo(p1,p1[i].No,i)){

      cout<<”該學(xué)號(hào)已存在“<

      continue;}

      cout << ”請(qǐng)輸入姓名“ << endl;

      cin >> p1[i].name;

      cout << ”請(qǐng)輸入性別“ << endl;

      while(1){

      cin >> p1[i].gender;

      if(isGender(p1[i].gender)==1)

      break;

      else

      cout<<”格式錯(cuò)誤,請(qǐng)重新輸入“<

      }

      cout << ”請(qǐng)輸入出生年月“ << endl;

      while(1){

      cin >> p1[i].brithday;

      if(isNo(p1[i].brithday))

      break;

      else

      cout<<”格式錯(cuò)誤,請(qǐng)重新輸入“<

      }

      cout << ”是否為黨員“ << endl;while(1){

      cin >> p1[i].tpartym;if(isYN(p1[i].tpartym))

      break;else

      cout<<”格式錯(cuò)誤,請(qǐng)重新輸入“<

      cout << ”請(qǐng)輸入手機(jī)號(hào)碼“ << endl;while(1){

      cin >> p1[i].phoneNo;if(isNo(p1[i].phoneNo))

      break;else

      cout<<”格式錯(cuò)誤,請(qǐng)重新輸入“<

      cout << ”請(qǐng)輸入地址“ << endl;cin >> p1[i].addr;InitQueue(p1[i]);p1[i].average=0;

      //if(!(fp=fopen(”e:mysbasedata.dat“,”a“)))//cout<<”打開文件錯(cuò)誤“<

      cout << ”請(qǐng)輸入課程代號(hào),輸0結(jié)束“ << endl;cin >> e.cNo;

      //if(isExitcNo(p1[i],e.cNo))

      // cout<<”該課程已存在,請(qǐng)勿重新輸入“<

      if(strcmp(e.cNo,”c01“)==0)

      strcpy(e.cname,”原理基礎(chǔ)“);else if(strcmp(e.cNo,”c02“)==0)

      strcpy(e.cname,”數(shù)據(jù)結(jié)構(gòu)“);else if(strcmp(e.cNo,”c03“)==0)

      strcpy(e.cname,”數(shù)學(xué)建?!?;else if(strcmp(e.cNo,”c04“)==0)

      strcpy(e.cname,”微觀經(jīng)濟(jì)“);else if(strcmp(e.cNo, ”0“)== 0)

      break;else {

      cout<<”課程代號(hào)出錯(cuò),請(qǐng)重新輸入“<

      continue;}

      cout << ”請(qǐng)輸入該課程成績(jī)“ << endl;

      cin >> e.degree;

      if(exiscNoreassign(p1[i],e.cNo,e.degree)==0)

      EnQueue(p1[i], e);

      //}

      }

      InsertFile(p1[i]);

      cout << ”1.繼續(xù)添加“ << endl;

      cout<<”0.返回“<

      cin >> a;

      i++;

      } while(a!=0);}

      break;case 8:{ int a=-1;do{ int flag=0;if(i==0){

      cout<<”信息為空,請(qǐng)先創(chuàng)建基本信息“<

      a=0;

      } else{

      char c[10];

      student temp;

      cout<<”請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào)“<

      cin>>c;

      for(int j=0;j

      {

      if(strcmp(p1[j].No,c)==0)

      {

      i--;

      for(int k=j;k

      p1[k]=p1[k+1];

      flag=1;

      break;

      }

      }

      if(flag==0)

      cout<<”該學(xué)號(hào)不存在或已被刪除“<

      else

      reWFile(p1,i);

      cout<<”1.繼續(xù)刪除“<

      cout<<”0.返回上層“<

      cin>>a;

      }

      }while(a!=0);}

      break;

      case 9:break;

      defalult:

      cout<<”請(qǐng)輸入1-9的數(shù)字:“<

      system(”pause“);

      break;} system(”pause“);system(”CLS“);}while(choice!=9);return 0;}

      頭文件: typedef struct courses{ char cNo[15];char cname[20];char sNo[10];int degree;courses *next;}courses;typedef struct student{ char No[10];char name[10];char gender[5];char brithday[8];char tpartym[5];char phoneNo[15];char addr[20];//courses a;courses *front;courses *rear;int average;}student;/*typedef struct{ courses *front;courses *rear;}LinkQueue;*/ Status InitQueue(student &Q){ Q.front=Q.rear=new courses;Q.front->next=0;return OK;} Status EnQueue(student &Q,courses e){ courses *r;r=new courses;strcpy(r->cNo,e.cNo);strcpy(r->cname,e.cname);r->degree=e.degree;r->next=0;Q.rear->next=r;Q.rear=r;return OK;} Status DeQueue(student &Q,courses &e){ courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;strcpy(e.sNo,r->sNo);e.degree=r->degree;Q.front->next=r->next;if(Q.rear=r)

      Q.rear=Q.front;delete r;return OK;} Status GetLine(student Q){ courses *r;if(Q.front==Q.rear)

      cout<<”課程信息為空,請(qǐng)先輸入課程信息“;else{

      r=Q.front->next;

      while(r){

      //strcpy(e.cNo,Q.front->next->cNo);

      //e.degree=Q.front->next->degree;

      cout<cname<<” “<degree<<” “;

      r=r->next;}} cout<next;Q.average=0;while(r){

      Q.average+=r->degree;

      r=r->next;

      n++;} Q.average/=n;return OK;} int isExitcNo(student Q,char *cNo){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){

      flag=1;

      break;} r=r->next;} return flag;} int isExistNo(student *p1,char *No,int i=0){ int j=0,flag=0;for(j=0;j

      if(strcmp(p1[j].No,No)==0)

      {

      flag=1;

      break;

      } return flag;} int exiscNoreassign(student &Q,char *cNo,int degree){ int flag=0;courses *r;if(Q.front==Q.rear)return ERROR;r=Q.front->next;while(r){ if(strcmp(r->cNo,cNo)==0){

      r->degree=degree;

      flag=1;

      break;} r=r->next;} return flag;} int isNo(char *No){ int j,flag=1;for(j=0;No[j]!='