軟件工程課程設(shè)計實驗報告-學(xué)生信息管理系統(tǒng)_第1頁
軟件工程課程設(shè)計實驗報告-學(xué)生信息管理系統(tǒng)_第2頁
軟件工程課程設(shè)計實驗報告-學(xué)生信息管理系統(tǒng)_第3頁
軟件工程課程設(shè)計實驗報告-學(xué)生信息管理系統(tǒng)_第4頁
軟件工程課程設(shè)計實驗報告-學(xué)生信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

軟件工程課程實驗報告

學(xué)生信息管理系統(tǒng)

系統(tǒng)名稱學(xué) 院

_ 學(xué)生信息管理系統(tǒng)設(shè)計文檔可行性研究技術(shù)可行性已經(jīng)有人開發(fā)過,并且我們也都使用過相類似系統(tǒng),對其一般性的軟件和操作環(huán)境、編譯環(huán)境都比較熟悉,所以說在技術(shù)上來說是可行的。經(jīng)濟(jì)可行性當(dāng)前系統(tǒng)只對服務(wù)器有關(guān)的要求,在服務(wù)費用方面,支出在你那個承擔(dān)的范圍,以后的維護(hù)及其他設(shè)備的總共費用在可以承擔(dān)的范圍。用當(dāng)前系統(tǒng)可以節(jié)約出能夠支付當(dāng)前系統(tǒng)的直接支出,以后維護(hù)費用更是比以前的機(jī)制節(jié)約很多錢。操作可行性系統(tǒng)的操作方式在這個用戶組織內(nèi)能行得通。需求分析輸入讓學(xué)生在紙面上填寫相關(guān)內(nèi)容,然后等待輔導(dǎo)員或管理員的審批確認(rèn)后,再輸入數(shù)據(jù)庫中保存。輸出學(xué)生選擇用戶選項進(jìn)入系統(tǒng)后,系統(tǒng)可經(jīng)有算法程序輸出學(xué)生基本信息表,學(xué)習(xí)成績表等。打印輸出可打印基本信息、學(xué)習(xí)成績等各種表格以及在對相應(yīng)信息進(jìn)行統(tǒng)計操作后的表格。文件輸出可將所有打印表格輸出到

EXCEL

文件中,以便用戶使用其它的

EXCEL

軟件改變表格的大小及字體。故障處理內(nèi)部故障處理在開發(fā)階段可以隨即修改數(shù)據(jù)庫里的相應(yīng)內(nèi)容。外部故障處理對編輯的程序進(jìn)行重裝載時,第一次裝載認(rèn)為錯,修改。第二次運行,在需求調(diào)用時出錯,有錯誤提示,重試。性能要求分析系統(tǒng)易操作性所開發(fā)的系統(tǒng)應(yīng)做到操作簡單,盡量使系統(tǒng)操作不受用戶對電腦知識水平的限制。系統(tǒng)具有可維護(hù)性由于系統(tǒng)涉及的信息比較廣,數(shù)據(jù)庫中的數(shù)據(jù)需定期修改,系統(tǒng)可利用的空間及性能也隨之下降,為了使系統(tǒng)更好地運轉(zhuǎn),學(xué)院可以對系統(tǒng)數(shù)據(jù)及一些簡單的功能進(jìn)行獨立的維護(hù)及調(diào)整。2.4.3

系統(tǒng)具有開放性該系統(tǒng)能夠在開放的硬件體系結(jié)構(gòu)中運行,并且能與其他系統(tǒng)順利連接,不會因外部系統(tǒng)的不同面要做在量的修改工作。概要設(shè)計基本設(shè)計概念和處理流程管理員通過密碼認(rèn)證,進(jìn)入信息管理頁面對學(xué)生相關(guān)信息的錄入、更新、修改、添加等操作,也可以通過查詢界面對學(xué)生信息進(jìn)行完全的查詢,而學(xué)生和相關(guān)人員只能通過公共的查詢界面對學(xué)生信息進(jìn)行查詢,如要對學(xué)生信息進(jìn)行完全查詢就需要得到管理員的同意。接口設(shè)計本系統(tǒng)采用快速原型開發(fā)工具

Visual

Basic

6.0

進(jìn)行開發(fā),所提供的不同層次的接口,都具有高度的集成性,本系統(tǒng)沒有采用低級語言設(shè)計和完成自定義接口,因此接口設(shè)計部分已經(jīng)由不同方式的組件來完成了,以下只做簡單說明。用戶接口說明將向用戶提供的命令和它們的語法結(jié)構(gòu),以及軟件的回答信息。命令語法信息正確信息錯誤提交IF ELSE進(jìn)入系統(tǒng)返回到當(dāng)前界面重設(shè)點擊事件清空輸入的數(shù)據(jù)無取消點擊事件返回到當(dāng)前界面無3.2.2

外部接口說明本系統(tǒng)同外界的所有接口的安排包括軟件與硬件之間的接口、本系統(tǒng)與各支持軟件直接的關(guān)系。管理界面數(shù)據(jù)

中心處理處理打印查詢管理信息輸出查詢用戶界面硬件接口軟件接口鍵盤鼠標(biāo)打印機(jī)主模塊√√管理模塊√√√查詢模塊√√√3.2.3

內(nèi)部接口說明本系統(tǒng)之內(nèi)的各個系統(tǒng)元素之間的接口的安排。數(shù)據(jù)庫接口設(shè)計采用ADO

連接方式。模塊名稱主模塊管理員驗證模塊用戶查詢界面管理界面主模塊√√√管理員驗證模塊√√用戶查詢界面√管理界面√√詳細(xì)設(shè)計控制流程圖主模塊軟件結(jié)構(gòu)4.1.2

管理員登陸軟件結(jié)構(gòu)4.1.3

用戶查詢軟件結(jié)構(gòu)用戶查詢模塊輸入查詢條件IF

正確ELSE輸出結(jié)果打印出結(jié)果返回重新輸入條件4.2

源程序流程圖5、項目測試功能截圖:5.1登陸界

面5.2學(xué)生用戶功能界面5.3

學(xué)生查詢功能5.4管理員管理界面5.5管理員輸入功能5.6管理員刪除功能5.7管理員查詢功能5.8管理員修改功能5.9管理員插入功能5.10統(tǒng)計功能5.11分類功能5.12顯示功能文件保存名為:STUDENT5.13

管理員保存功能路徑為:C:\6、項目管理6、1

人員管理團(tuán)隊負(fù)責(zé)人:陶修赟小組成員:萬富,洪鑫,汪賢惠,項鑫6、2

產(chǎn)品管理本產(chǎn)品工作于Win-TC

工作環(huán)境,用于對學(xué)生成績的管理。學(xué)生用戶,可進(jìn)行查詢課程成績;管理員可對學(xué)生及其成績進(jìn)行錄入、修改、查詢、排列等功能。本系統(tǒng)可進(jìn)行維護(hù),修改。6、3

進(jìn)程管理標(biāo)志:提交可行性分析報告標(biāo)志:提交項目開發(fā)計劃標(biāo)志:完成需求分析報告標(biāo)志:完成軟件分析與設(shè)計文檔標(biāo)志:代碼編寫全部完成標(biāo)志:完成軟件測試,可投入使用可行性分析:5月23日-5月24日項目開發(fā)計劃:5月25日-5月26日需求分析:5月27日-5月27日軟件設(shè)計:5月30日-6月1日編程實現(xiàn):6月2日-6月10日軟件測試:6月13日-6月14日6、4

項目計劃甘特圖7、編 碼#include<stdio.h>#include

<stdlib.h>#include"string.h"#include

"conio.h"----------------------------STUDENT---------------------------------- \n"| number

| name

|Comp|Math|Eng

|

sum

||---------------|---------------|----|----|----|--------|-------|-----|

"| %-10s

|%-15s|%4d|%4d|%4d|

%4d |%.2f|%4d|\n"#defineHEADER1"#defineHEADER2"ave |mici|\n"#defineHEADER3"#define

FORMAT

"#defineDATAp->data.num,p->,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci#define

END " ---------------------------------------------------------------------

\n"intsaveflag=0;

/*是否需要存盤的標(biāo)志變量*/typedef

struct

student /*標(biāo)記為

student*/{charnum[10];char

name[15];int

cgrade;int

mgrade;integrade;inttotal;floatave;int

mingci;/*學(xué)號*//*姓名*//*C

語言成績*//*數(shù)學(xué)成績*//*英語成績*//*總分*//*平均分*//*名次*/};/*定義每條記錄或結(jié)點的數(shù)據(jù)結(jié)構(gòu),標(biāo)記為

node*/typedefstruct

node{structstudentdata;structnode

*next;}Node,*Link;/*清屏.與

clrscr()功能相同*//*在文本模式中選擇新的字符顏色*/TheStudents'GradeManagementSystem

\n");void

menuchoice(){system("cls");textcolor(10);gotoxy(7,5);cprintf("gotoxy(7,8);printf("\nPleaseEnter

your

choice; 0enterstudents'system\n\t\t\t");printf(" ");printf("1enterteachers'

system\n");}void

menu()

/*菜單函數(shù)*/{/*清屏.與

clrscr()功能相同*//*在文本模式中選擇新的字符顏色*//*在文本窗口中設(shè)置光標(biāo),下同*/TheStudents'GradeManagementSystem

\n");system("cls");textcolor(10);gotoxy(7,5);cprintf("gotoxy(7,8);cprintf("*************************Menu********************************\n");gotoxy(7,9);*\n");*\n");*\n");*\n");1

input record 2delete

record3

search record 4modify

record5

insert record 6

count record7sort

reord

8save

record9

display

record 0

quit system*\n");cprintf("gotoxy(7,10);cprintf("gotoxy(7,11);cprintf("gotoxy(7,12);cprintf("gotoxy(7,13);cprintf("gotoxy(7,14);cprintf("/*cprintf()

送*************************************************************\n");格式化輸出至文本窗口屏幕中*/}/*清屏.與

clrscr()功能相同*//*在文本模式中選擇新的字符顏色*//*在文本窗口中設(shè)置光標(biāo),下同*/TheStudents'GradeManagementSystem

\n");void

menustudent(){system("cls");textcolor(10);gotoxy(7,5);cprintf("gotoxy(7,8);cprintf("*************************Menu********************************\n");gotoxy(7,9);*3

search record 0

quit system*\n");cprintf("gotoxy(7,10);cprintf("/*cprintf()

送*************************************************************\n");格式化輸出至文本窗口屏幕中*/}void

printheader()

/*格式化輸出表頭*/{printf(HEADER1);printf(HEADER2);printf(HEADER3);}voidprintdata(Node

*pp)

/*格式化輸出表中數(shù)據(jù)*/{Node*

p;p=pp;printf(FORMAT,DATA);}has

wrong! press

any

key

tovoidWrong() /*輸出按鍵錯誤信息*/{printf("\n\n\n\n\n***********Error:inputcontinue**********\n");getchar();}void

Nofind() /*輸出未查找此學(xué)生的信息*/{printf("\n=====>Notfindthis

student!\n");}void

Disp(Link

l) /*顯示單鏈表

l

中存儲的學(xué)生記錄,內(nèi)容為

student

結(jié)構(gòu)中定義的數(shù)據(jù)項*/{Node

*p;p=l->next;

/*l

存儲的是單鏈表中頭結(jié)點的指針,該頭結(jié)點沒有存儲學(xué)生信息,指針域指向的后繼結(jié)點才有學(xué)生信息*/if(!p){printf("\n=====>Notstudentrecord!\n");getchar();return;}printf("\n\n");printheader();

/*輸出表格頭部*/while(p) /*逐條輸出鏈表中存儲的學(xué)生信息*/{printdata(p);p=p->next;

/*移動至下一個結(jié)點*/printf(HEADER3);}getchar();}Node*

Locate(Link

l,char

findmess[],char

nameornum[])

/*用于定位鏈表中符合要求的節(jié)點,并返回指向該節(jié)點的指針,findmess[]保存要查找的具體內(nèi)容;

nameornum[]保存按什么查找;在單鏈表

l中查找;*/{Node

*r;if(strcmp(nameornum,"num")==0)

/*按學(xué)號查詢*/{r=l->next;while(r){if(strcmp(r->data.num,findmess)==0)

/*若找到

findmess

值的學(xué)號*/return

r;r=r->next;}}else

if(strcmp(nameornum,"name")==0) /*按姓名查詢*/{r=l->next;while(r){/*若找到

findmess

值的學(xué)生姓名*/if(strcmp(r->,findmess)==0)return

r;r=r->next;}}return

0;}/*輸入字符串,并進(jìn)行長度驗證(長度<lens)*/voidstringinput(char*t,intlens,char

*notice){char

n[255];do{printf(notice);

/*顯示提示信息*/scanf("%s",n); /*輸入字符串*/if(strlen(n)>lens)printf("\n

Exceed

the

required

length!

\n");

/*進(jìn)行長度校驗,超過

lens值重新輸入*/}while(strlen(n)>lens);strcpy(t,n);

/*將輸入的字符串拷貝到字符串

t中*/}int

numberinput(char

*notice) /*輸入分?jǐn)?shù),0<=分?jǐn)?shù)<=100)*/{int

t=0;do{printf(notice);

/*顯示提示信息*/scanf("%d",&t); /*輸入分?jǐn)?shù)*/if(t>100||

t<0)

printf("\n

Score

must

in

[0,100]!

\n");

/*進(jìn)行分?jǐn)?shù)校驗*/}while(t>100||t<0);return

t;}void

Add(Link

l) /*增加學(xué)生記錄*/{Node

*p,*r,*s;

/*實現(xiàn)添加操作的臨時的結(jié)構(gòu)體指針變量*/char

ch,flag=0,num[10];r=l;s=l->next;system("cls");Disp(l);

/*先打印出已有的學(xué)生信息*/while(r->next!=NULL)r=r->next;

/*將指針移至于鏈表最末尾,準(zhǔn)備添加記錄*/while(1)/*一次可輸入多條記錄,直至輸入學(xué)號為

0

的記錄結(jié)點添加操作*/{while(1)

/*輸入學(xué)號,保證該學(xué)號沒有被使用,若輸入學(xué)號為

0,則退出添加記錄操作*/{stringinput(num,10,"Input

number(press

'0'return

menu):");

/*格式化輸入學(xué)號并檢驗*/flag=0;if(strcmp(num,"0")==0)/*輸入為

0,則退出添加操作,返回主界面*/{return;}s=l->next;while(s)

/*查詢該學(xué)號是否已經(jīng)存在,若存在則要求重新輸入一個未被占用的學(xué)號*/{if(strcmp(s->data.num,num)==0){flag=1;break;}s=s->next;}if(flag==1)/*提示用戶是否重新輸入*/{getchar();printf("=====>Thenumber%sisnotexisting,tryagain?(y/n):",num);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}else{break;}}p=(Node*)malloc(sizeof(Node));if(!p){printf("\n

Allocate

memory

failure

");

/*如沒有申請到,打印提示信息*/return

;}strcpy(p->data.num,num);

/*將字符串

num

拷貝到

p->data.num

中*/stringinput(p->,15,"Name:");p->data.cgrade=numberinput("C

language

Score[0-100]:");

/*輸入并檢驗分?jǐn)?shù),分?jǐn)?shù)必須在

0-100之間*/p->data.mgrade=numberinput("MathScore[0-100]:");p->data.egrade=numberinput("English

Score[0-100]:");p->data.total=p->data.egrade+

p->data.cgrade

+

p->data.mgrade;

/*計算總分*/p->data.ave=(float)(p->data.total/3); /*計算平均分*/p->data.mingci=0;p->next=NULL;/*表明這是鏈表的尾部結(jié)點*/r->next=p;

/*將新建的結(jié)點加入鏈表尾部中*/r=p;saveflag=1; /*在

main()有對該全局變量的判斷,若為

1,則進(jìn)行存盤操作*/}return

;}void

Qur(Link

l)

/*按學(xué)號或姓名,查詢學(xué)生記錄*/{int

select;/*1:按學(xué)號查,2:按姓名查,其他:返回主界面(菜單)*/char

searchinput[20];/*保存用戶輸入的查詢內(nèi)容*/Node

*p;if(!l->next)/*若鏈表為空*/{system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("\nprintf("=====>1Search

by

number =====>2Searchbyname\n");please

choice[1,2]:");scanf("%d",&select);if(select==1)

/*按學(xué)號查詢*/{stringinput(searchinput,10,"Inputtheexistingstudentnumber:");p=Locate(l,searchinput,"num");/*在

l

中查找學(xué)號為

searchinput

值的節(jié)點,并返回節(jié)點的指針*/if(p)/*若

p!=NULL*/{printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}else

if(select==2)

/*按姓名查詢*/{stringinput(searchinput,15,"inputtheexistingstudentname:");p=Locate(l,searchinput,"name");if(p){printheader();printdata(p);printf(END);printf("pressanykeytoreturn");getchar();}elseNofind();getchar();}elseWrong();getchar();}void

Del(Link

l) /*刪除學(xué)生記錄:先找到保存該學(xué)生記錄的節(jié)點,然后刪除該節(jié)點*/{intsel;Node

*p,*r;char

findmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");Disp(l);printf("\nprintf("=====>1Delete

bynumber =====>2Deletebyname\n");please

choice[1,2]:");scanf("%d",&sel);if(sel==1){stringinput(findmess,10,"inputtheexistingstudentnumber:");p=Locate(l,findmess,"num");if(p) /*p!=NULL*/{r=l;while(r->next!=p)r=r->next;r->next=p->next;/*將

p

所指節(jié)點從鏈表中去除*/free(p);/*釋放內(nèi)存空間*/printf("\n=====>Delete

success!\n");getchar();saveflag=1;}elseNofind();getchar();}else

if(sel==2){stringinput(findmess,15,"inputtheexistingstudentname");p=Locate(l,findmess,"name");

/*先按姓名查詢到該記錄所在的節(jié)點*/if(p){r=l;while(r->next!=p)r=r->next;r->next=p->next;free(p);printf("\n=====>Deletesuccess!\n");getchar();saveflag=1;}elseNofind();getchar();}elseWrong();getchar();}void

Modify(Link

l)

/*修改學(xué)生記錄。先按輸入的學(xué)號查詢到該記錄,然后提示用戶修改學(xué)號之外的值,學(xué)號不能修改*/{Node

*p;char

findmess[20];if(!l->next){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return;}system("cls");printf("Modifystudentrecorder:");Disp(l);stringinput(findmess,10,"\nInput

the

existing

student

number:");

/*輸入并檢驗該學(xué)號*/p=Locate(l,findmess,"num");/*查詢到該節(jié)點*/if(p)/*若

p!=NULL,表明已經(jīng)找到該節(jié)點*/{printf("Number:%s,\n",p->data.num);printf("Name:%s,",p->);stringinput(p->,15,"inputnew

name:");printf("Clanguage

score:%d,",p->data.cgrade);p->data.cgrade=numberinput("Clanguage

Score[0-100]:");printf("Mathscore:%d,",p->data.mgrade);p->data.mgrade=numberinput("Math

Score[0-100]:");printf("English

score:%d,",p->data.egrade);p->data.egrade=numberinput("English

Score[0-100]:");p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;p->data.ave=(float)(p->data.total/3);p->data.mingci=0;printf("\n=====>Modifysuccess!\n");Disp(l);saveflag=1;}elseNofind();getchar();}void

Insert(Link

l)

/*插入記錄,按學(xué)號查詢到要插入的節(jié)點的位置,然后在該學(xué)號之后插入一個新節(jié)點*/{Link

p,v,newinfo;

/*p

指向插入位置,newinfo指新插入記錄*/char

ch,num[10],s[10]; /*s[]保存插入點位置之前的學(xué)號,num[]保存輸入的新記錄的學(xué)號*/intflag=0;v=l->next;system("cls");Disp(l);while(1){stringinput(s,10,"\nPleaseinput

Insert

location afterthe

Number:");flag=0;v=l->next;while(v)/*查詢該學(xué)號是否存在,flag=1

表示該學(xué)號存在*/{if(strcmp(v->data.num,s)==0)

{flag=1;break;}v=v->next;}if(flag==1)break;

/*若學(xué)號存在,則進(jìn)行插入之前的新記錄的輸入操作*/else{getchar();printf("\n=====>Thenumber%sisnotexisting,tryagain?(y/n):",s);scanf("%c",&ch);if(ch=='y'||ch=='Y')continue;elsereturn;}}stringinput(num,10,"Inputnew

student

Number:"); /*以新記錄的輸入操作與

Add()相同*/v=l->next;while(v){if(strcmp(v->data.num,num)==0){printf("=====>Sorry,thenewnumber:'%s'isexisting!\n",num);printheader();printdata(v);printf("\n");getchar();return;}v=v->next;}newinfo=(Node*)malloc(sizeof(Node));if(!newinfo){printf("\n

Allocate

memory

failure

");

/*如沒有申請到,打印提示信息*/return

; /*返回主界面*/}strcpy(newinfo->data.num,num);stringinput(newinfo->,15,"Name:");newinfo->data.cgrade=numberinput("ClanguageScore[0-100]:");newinfo->data.mgrade=numberinput("MathScore[0-100]:");newinfo->data.egrade=numberinput("English

Score[0-100]:");newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade;newinfo->data.ave=(float)(newinfo->data.total/3);newinfo->data.mingci=0;newinfo->next=NULL;saveflag=1;p=l->next; /*將指針賦值給p,因為l

中的頭節(jié)點的下一個節(jié)點才實際保存著學(xué)生的記錄*/while(1){if(strcmp(p->data.num,s)==0)

/*在鏈表中插入一個節(jié)點*/{newinfo->next=p->next;p->next=newinfo;break;}p=p->next;}Disp(l);printf("\n\n");getchar();}void

Tongji(Link

l) /*統(tǒng)計總分,單科第一和各科不及格人數(shù)*/{Node

*pm,*pe,*pc,*pt;/*用于指向分?jǐn)?shù)最高的節(jié)點*/Node

*r=l->next;intcountc=0,countm=0,counte=0;/*保存三門成績中不及格的人數(shù)*/if(!r){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return

;}system("cls");Disp(l);pm=pe=pc=pt=r;while(r){if(r->data.cgrade<60)countc++;if(r->data.mgrade<60)countm++;if(r->data.egrade<60)

counte++;pc=r;pm=r;pe=r;if(r->data.cgrade>=pc->data.cgrade)if(r->data.mgrade>=pm->data.mgrade)if(r->data.egrade>=pe->data.egrade)if(r->data.total>=pt->data.total)pt=r;r=r->next;}printf("\n------------------------------theTongJi

result--------------------------------\n");printf("C

Language<60: %d

(ren)\n",countc);printf("Mathprintf("English<60: %d

(ren)\n",countm);<60: %d

(ren)\n",counte);totoaltotoalprintf("-------------------------------------------------------------------------------\n");printf("The highest

student by

total

scroe name:%sscore:%d\n",pt->,pt->data.total);printf("The highest

student by

English

score name:%sscore:%d\n",pe->,pe->data.egrade);printf("The highest

student by

Math

score name:%stotoalscorename:%s

totoalscore:%d\n",pm->,pm->data.mgrade);printf("The highest student by Cscore:%d\n",pc->,pc->data.cgrade);printf("\n\npressanykeytoreturn");getchar();}void

Sort(Link

l) /*利用插入法排序?qū)崿F(xiàn)單鏈表的按總分字段的降序排序,從高到低*/{Link

ll;Node

*p,*rr,*s;int

i=0;if(l->next==NULL){system("cls");printf("\n=====>Nostudentrecord!\n");getchar();return

;}ll=(Node*)malloc(sizeof(Node));if(!ll){printf("\n

Allocate

memory

failure

");

/*如沒有申請到,打印提示信息*/return

;}ll->next=NULL;system("cls");Disp(l);p=l->next;while(p){s=(Node*)malloc(sizeof(Node));

/*s

用于保存從原鏈表中取出的節(jié)點信息*/if(!s){printf("\nAllocatememoryfailure");return

;}s->data=p->data;s->next=NULL;rr=ll; /*rr

鏈表存儲插入單個節(jié)點后保持排序的鏈表,ll

是這個鏈表的頭指針,每次從頭開始查找插入位置*/while(rr->next!=NULL&&rr->next->data.total>=

p->data.total)rr=rr->next;

/*指針移至總分比

p所指的節(jié)點的總分小的節(jié)點位置*/if(rr->next==NULL)/*若新鏈表

ll

中的所有節(jié)點的總分值都比

p->data.total

大時,就將

p

所指節(jié)點加入鏈表尾部*/rr->next=s;else

/*否則將該節(jié)點插入至第一個總分字段比它小的節(jié)點的前面*/{s->next=rr->next;rr->next=s;}p=p->next;

/*原鏈表中的指針下移一個節(jié)點*/}l->next=ll->next;

/*ll中存儲是的已排序的鏈表的頭指針*/p=l->next; /*已排好序的頭指針賦給

p,準(zhǔn)備填寫名次*/while(p) /*當(dāng)

p

不為空時,進(jìn)行下列操作*/{i++; /*結(jié)點序號*/p->data.mingci=i;

/*將名次賦值*/p=p->next; /*指針后移*/}Disp(l);printf("\n =====>Sort

complete!\n");saveflag=1;}void

Save(Link

l)

/*數(shù)據(jù)存盤,若用戶沒有專門進(jìn)行此操作且對數(shù)據(jù)有修改,在退出系統(tǒng)時,會提示用戶存盤*/{FILE*fp;Node*p;int

count=0;fp=fopen("c:\\student","wb");

/*以只寫方式打開二進(jìn)制文件*/if(fp==NULL)

/*打開文件失敗*/{printf("\n=====>openfileerror!\n");getchar();return

;}p=l->next;while(p){if(fwrite(p,sizeof(Node),1,fp)==1)/*每次寫一條記錄或一個節(jié)點信息至文件*/{p=p->next;count++;}elsebreak;filecomplete,totalsaved'srecordnumber}if(count>0){getchar();printf("\n\n\n\n\n=====>Saveis:%d\n",count);getchar();saveflag=0;}else{system("cls");printf("Thecurrentlinkisempty,nostudentrecordissaved!\n");getchar();}fclose(fp);

/*關(guān)閉此文件*/}int

main(void){Linkl;FILE

*fp;intselect;char

ch;/*定義鏈表*//*文件指針*//*保存選擇結(jié)果變量*//*保存(y,Y,n,N)*/int

count=0;

/*保存文件中的記錄條數(shù)*/Node*p,*r; /*定義記錄指針變量*/l=(Node*)malloc(sizeof(Node));if(!l){printf("\nAllocatememoryfailure");return

;}l->next=NULL;r=l;fp=fopen("C:\\stud

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論