




免費預(yù)覽已結(jié)束,剩余24頁可下載查看
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
學(xué)生成績管理系統(tǒng)一、 設(shè)計目的1、掌握對結(jié)構(gòu)體、指針、文件的操作和C語言算法的應(yīng)用。2、用程序?qū)崿F(xiàn)文件記錄的添加、修改、刪除、排序(包括對文件記錄按某個數(shù)據(jù)項排序)、查詢、插入,或動態(tài)鏈表的建立、查找、修改、刪除、插入、輸出、排序,或結(jié)構(gòu)體數(shù)組的輸入、修改、刪除、插入、輸出。二、 設(shè)計過程1. 需求分析1)、系統(tǒng)界面需求進(jìn)入系統(tǒng)時應(yīng)當(dāng)出現(xiàn)人性化、個性化、隨性化的字符界面或圖形界面,提供菜單選項,選擇執(zhí)行相應(yīng)的功能,輸入輸出數(shù)據(jù)或操作成功時要有相應(yīng)提示信息,此外還要提供幫助信息,如系統(tǒng)的功能介紹等,提供系統(tǒng)信息或程序信息,如作者、聯(lián)系方式等。2)、系統(tǒng)功能需求對設(shè)計題目進(jìn)行分析,可知系統(tǒng)主要功能可以有下面幾種,而且各種功能互相組合,形成或構(gòu)成新的功能。、輸入功能。第一次可通過在內(nèi)存中新建或創(chuàng)建動態(tài)鏈表輸入學(xué)生的成績記錄和其他數(shù)據(jù)記錄,且隨時可以退出輸入,既可在退出時可自動保存或提示保存或輸入完畢后返回主菜單選擇“保存文件”命令進(jìn)行手動保存到硬盤,也可以在輸入過程中自動保存。如果以前已經(jīng)建立過動態(tài)鏈表且已經(jīng)保存到文件中,可先載入文件(相當(dāng)于打開文件、讀取文件),再插入新的記錄到動態(tài)鏈表。、插入功能。插入或添加一個學(xué)生的成績記錄到已有的動態(tài)鏈表中,比如載入文件后的動態(tài)鏈表或剛剛新建的動態(tài)鏈表。、查看功能。直接輸出未排序或已按某數(shù)據(jù)項排序(如按總成績從高到低排序)的動態(tài)鏈表中所有學(xué)生的記錄到屏幕上顯示。、查找功能。查找的目的可能是查看數(shù)據(jù)、修改數(shù)據(jù)或刪除數(shù)據(jù)。查找的方式有精確查找和模糊查找兩種。精確查找,指根據(jù)學(xué)號、姓名或其他數(shù)據(jù)項在動態(tài)鏈表中查找并顯示一個學(xué)生的成績記錄。模糊查找,指根據(jù)學(xué)號、姓名或其他數(shù)據(jù)項的邏輯組合條件在動態(tài)鏈表中查找并顯示符合條件的學(xué)生的成績記錄。查找的結(jié)果可以返回地址(指針)用于查看、修改或刪除數(shù)據(jù)。、修改功能。根據(jù)學(xué)號、姓名或其他數(shù)據(jù)項在動態(tài)鏈表中查找并修改一個學(xué)生的成績記錄。、刪除功能。根據(jù)學(xué)號、姓名或其他數(shù)據(jù)項在動態(tài)鏈表中查找并刪除一個學(xué)生的成績記錄。、保存文件。將新建的或修改的動態(tài)鏈表的所有數(shù)據(jù)寫入(或存入、存到)二進(jìn)制文件中。、載入文件。相當(dāng)于打開文件并讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級、學(xué)號、姓名、成績等)到動態(tài)鏈表。、幫助功能。顯示幫助信息和系統(tǒng)信息。、退出功能。退出系統(tǒng)或退出程序,可增加一個退出函數(shù),在退出時可顯示系統(tǒng)信息或程序信息。此外還有排序功能、統(tǒng)計功能和加密功能。排序功能,指可按成績、學(xué)號或姓名排序,而成績排序又可按單科成績或總成績排序。統(tǒng)計功能,指統(tǒng)計及格人數(shù)和優(yōu)秀人數(shù)。加密功能,指登錄系統(tǒng)要使用密碼驗證,防止別人偷窺或篡改數(shù)據(jù)。2. 概要設(shè)計在需求分析的基礎(chǔ)上,確定系統(tǒng)總體框架(即系統(tǒng)功能結(jié)構(gòu)圖、系統(tǒng)模塊結(jié)構(gòu)圖)。系統(tǒng)各個功能的詳細(xì)解釋。1.Create a new list of students data創(chuàng)建鏈表。輸入學(xué)生的成績和其他信息,并且自動計算總成績和平均成績2.Insert a student data插入記錄。在動態(tài)鏈表中插入一個學(xué)生的成績記錄。3.Output all students data顯示記錄。自動按總成績從高到低排序后顯示動態(tài)鏈表中所有學(xué)生的成績記錄。4.Search a student data查找記錄。根據(jù)學(xué)號在動態(tài)鏈表中查找并顯示一個學(xué)生的成績記錄。5.Modify a student data修改記錄。根據(jù)學(xué)號在動態(tài)鏈表中查找并修改一個學(xué)生的成績記錄。6.Delete a student data刪除記錄。根據(jù)學(xué)號在動態(tài)鏈表中查找并刪除一個學(xué)生的成績記錄。7.Save File 保存數(shù)據(jù)。將動態(tài)鏈表的所有數(shù)據(jù)寫入(或存入、存到)二進(jìn)制文件中。8.Load File讀取數(shù)據(jù)。讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級、學(xué)號、姓名、成績等)到動態(tài)鏈表。9.Help 幫助。顯示幫助信息和系統(tǒng)信息。0.Exit 退出。如菜單返回值為0程序結(jié)束。3. 詳細(xì)設(shè)計1)、數(shù)據(jù)結(jié)構(gòu)設(shè)計系統(tǒng)使用了結(jié)構(gòu)體類型存儲學(xué)生的成績記錄和其他記錄。#define NUM 9 /*定義課程的數(shù)目*/struct student /* 學(xué)生的數(shù)據(jù)結(jié)構(gòu) */ char class_020; /班級int num; /學(xué)號char name20; /姓名float scoreNUM; /成績float total; /總分float ave; /平均分struct student *next; int order; /排名stu;2)、算法結(jié)構(gòu)設(shè)計系統(tǒng)使用了以下函數(shù)來實現(xiàn)系統(tǒng)各個模塊的功能。函數(shù)名稱函數(shù)功能struct student *create(void)創(chuàng)建鏈表,完成數(shù)據(jù)錄入功能 void TotalScore(struct student *head) 計算每個學(xué)生的總成績和平均成績void IntSwap(int *pt1, int *pt2) 交換兩個整型數(shù)void FloatSwap(float *pt1, float *pt2) 交換兩個實型數(shù)void CharSwap(char *pt1, char *pt2) 交換兩個字符串void SortScore(struct student *head) 對學(xué)生成績排序并確定名次struct student *InsertStudent(struct student *head) 按學(xué)號插入一個結(jié)點數(shù)據(jù)void PrintScore(struct student *head) 顯示所有已經(jīng)建立好的節(jié)點的節(jié)點號和該節(jié)點中數(shù)據(jù)項內(nèi)容void SearchStudent(struct student *head) 按學(xué)號查找并顯示一個結(jié)點數(shù)據(jù)void ModifyStudent(struct student *head) 按學(xué)號查找并修改一個結(jié)點數(shù)據(jù)struct student *DeleteStudent(struct student *head) 按學(xué)號查找并刪除一個結(jié)點數(shù)據(jù)void SaveFile(struct student *head) 保存數(shù)據(jù)到文件模塊struct student *LoadFile(void) 加載存儲在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛Kvoid help()顯示幫助信息和系統(tǒng)信息*/void PassWord()登錄密碼驗證int menu_select(void)顯示菜單并獲得用戶鍵盤輸入的選項*void main()程序從主函數(shù)開始執(zhí)行系統(tǒng)主要功能的實現(xiàn)過程和方法。創(chuàng)建鏈表。在界面狀態(tài)下,輸入1后調(diào)用struct student *create(void) 函數(shù)創(chuàng)建動態(tài)鏈表,即提示輸入初始的學(xué)生信息,其中包括學(xué)生的學(xué)號、班級、姓名、和高等數(shù)學(xué)、C程序設(shè)計、大學(xué)英語、馬克思、大學(xué)體育的成績,若學(xué)號為0退出返回主菜單。學(xué)號是整型,長度要求10位而且必須是數(shù)字,班級和姓名是字符數(shù)組型而且長度為20,成績是浮點型(輸出成績時可只輸出1位小數(shù)或2位小數(shù))。都輸入完成后,系統(tǒng)調(diào)用void TotalScore(struct student *head) 函數(shù)計算每個學(xué)生的總成績和平均成績,還可以調(diào)用void SaveFile(struct student *head) 函數(shù)對指定的文件進(jìn)行寫操作,把輸入到動態(tài)鏈表的所有學(xué)生信息保存到文件中。在輸入記錄過程中若學(xué)號輸入0則返回主菜單。插入記錄。在界面狀態(tài)下,輸入2后調(diào)用struct student *InsertStudent(struct student *head) 函數(shù)在動態(tài)鏈表中插入一個學(xué)生的成績記錄,并且鏈表結(jié)點數(shù)加1。在插入記錄過程中若學(xué)號輸入0則返回主菜單。顯示記錄。在界面狀態(tài)下,輸入3后先調(diào)用void SortScore(struct student *head) 函數(shù)對學(xué)生成績排序并確定名次,而這個函數(shù)運用冒泡法進(jìn)行排序,若后一結(jié)點的總成績比前一結(jié)點的高,則調(diào)用void IntSwap(int *pt1, int *pt2) 函數(shù)交換兩個整型數(shù)如學(xué)號,調(diào)用void FloatSwap(float *pt1, float *pt2) 函數(shù)交換兩個實型數(shù)如成績,調(diào)用void CharSwap(char *pt1, char *pt2) 函數(shù)交換兩個字符串如班級和姓名,交換兩個字符串要用到strcmp,strcpy函數(shù),排序完畢后再調(diào)用void PrintScore(struct student *head) 函數(shù)顯示所有已經(jīng)建立好的節(jié)點的節(jié)點號和該節(jié)點中數(shù)據(jù)項內(nèi)容,即按總成績從高到低排序后顯示動態(tài)鏈表中所有學(xué)生的成績記錄。輸出所有記錄到屏幕上顯示后自動則返回主菜單。查找記錄。在界面狀態(tài)下,輸入4后調(diào)用void SearchStudent(struct student *head)函數(shù),即先用一個struct student類型的指針變量接收輸入的學(xué)號,再與動態(tài)鏈表中各結(jié)點的學(xué)號一一比較,如果沒有則返回失敗信息,如果找到就將輸出此學(xué)生全部信息到屏幕上顯示出來。在查找記錄過程中若學(xué)號輸入0則提示找不到并返回主菜單。修改記錄。在界面狀態(tài)下,輸入5后調(diào)用void ModifyStudent(struct student *head) 函數(shù),即先用一個變量接受輸入的學(xué)號,再與動態(tài)鏈表中各結(jié)點的學(xué)號一一比較,如果沒有則返回失敗信息,如果找到就將提示輸入新的數(shù)據(jù)。在修改記錄過程中若學(xué)號輸入0則提示找不到并返回主菜單。刪除記錄。在界面狀態(tài)下,輸入6后調(diào)用struct student *DeleteStudent(struct student *head) 函數(shù),即先用一個變量接收輸入的學(xué)號,再與動態(tài)鏈表中各結(jié)點的學(xué)號一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,并且鏈表結(jié)點數(shù)減1。在刪除記錄過程中若學(xué)號輸入0則提示找不到并返回主菜單。保存數(shù)據(jù)。在界面狀態(tài)下,輸入7后調(diào)用void SaveFile(struct student *head) 函數(shù),先用一個文件(FILE)類型結(jié)構(gòu)體的指針變量fp接收fopen(文件名,文件使用方式)函數(shù)的返回值(地址值),若打開操作失敗,其返回值為NULL(即地址值為0,是一個無效的指向)。若打開操作成功,返回值為指向被打開文件的文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址,該返回值要立即賦值給文件類型指針變量(例:/FILE *fp)保存起來,否則fopen函數(shù)返回值的丟失會導(dǎo)致無法對被打開的文件進(jìn)行操作。然后用fwrite(p,LEN,1,fp)函數(shù)寫入一條數(shù)據(jù)直到全部保存完畢,即移動指針指向鏈表尾。最后使用fclose(fp)函數(shù)關(guān)閉文件。讀取數(shù)據(jù)。在界面狀態(tài)下,輸入8后調(diào)用struct student *LoadFile(void) 加載存儲在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛K讀取文件中所有學(xué)生的數(shù)據(jù)(包括班級、學(xué)號、姓名、成績等)到動態(tài)鏈表。幫助。在界面狀態(tài)下,輸入8后調(diào)用void help()函數(shù),利用函數(shù)輸出幫助信息和系統(tǒng)信息。 退出??捎靡粋€函數(shù)exit(0)來實現(xiàn),可首先提示將信息保存到文件中,釋放動態(tài)創(chuàng)建的內(nèi)存空間,再退出此程序。統(tǒng)計功能,因為考慮到原來給出的函數(shù)中竟然沒有對學(xué)生成績的統(tǒng)計功能,因此新增此功能,可以得出所有的記錄個數(shù),最高、最低、平均分,并輸出相關(guān)的學(xué)生信息等。以及統(tǒng)計及格和優(yōu)秀人數(shù),判斷成績大于等于60分的為及格,并統(tǒng)計人數(shù),判斷成績大于等于80分的為優(yōu)秀,并統(tǒng)計人數(shù),最后顯示在屏幕上。4. 代碼設(shè)計新增登錄密碼驗證,將“char password7=123456; /*定義初始密碼*/”放在源代碼文件的開頭,將新定義函數(shù)void PassWord() 放到主函數(shù)void main()前,再在主函數(shù)中“printfn*n); /*操作界面*/”前插入“PassWord();”語句調(diào)用這個函數(shù)。/ Note:Your choice is C+ IDE/*#include iostream.h*/#include #include #include #include /*#define NULL 0*/ /*空地址*/#define LEN sizeof(struct student) /*結(jié)點的長度*/#define NUM 5 /*定義課程的數(shù)目*/char password7=123456; /*定義初始密碼*/ /*高等數(shù)學(xué) C程序設(shè)計 大學(xué)英語 馬克思 大學(xué)體育*/ char subjectNUM10=math,c_prog,english,polity,sport; struct student /*聲明struct student類型*/ char class_020; /*班級*/int num; /*學(xué)號*/char name20; /*姓名*/float score5; /*成績*/float total; /*總分*/float ave; /*平均分*/struct student *next; int order; /*排名*/stu; /*定義struct student類型的變量stu*/int n,i; /*n為全局變量,統(tǒng)計鏈表的結(jié)點數(shù)*/ /*函數(shù)功能:創(chuàng)建鏈表,完成數(shù)據(jù)錄入功能*/ struct student *create(void) /*函數(shù)返回值為指向struct student類型數(shù)據(jù)的地址*/ struct student *p1,*p2,*head; /*定義struct student類型的指針變量p1,p2,head*,*p1指向某一結(jié)點,p2指向p1的前一結(jié)點*/n=0; head=NULL; /*頭指針head為空地址,無效指向*/p1=p2=(struct student *)malloc(LEN); /*新開辟長度為LEN的內(nèi)存區(qū)并強制指針類型為struct student*/printf(1.creat a linked list to student data.n); printf(2.number:int type, class: char type20,name: char type 20, score:float type.n); printf(3.input number of student,if number is 0,stop inputing.n); printf(number:); scanf(%d,&p1-num); while(p1-num!=0) /*若為0則退出輸入*/ printf(class:); scanf(%s,p1-class_0); printf(name:); scanf(%s,p1-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); printf(*success*n); n=n+1; if(n=1) /*n=1或head=NULL*/head=p1; /*第一個結(jié)點的生成*/ else p2-next=p1; /*把新結(jié)點的地址放到當(dāng)前鏈表的尾結(jié)點即上一節(jié)點后面*/p2=p1; /*p2保存p1原本指向的地址,使p2指向p1原來指向的節(jié)點*/ p1=(struct student *)malloc(LEN); /*p1指向新申請到的節(jié)點*/ printf(input number of student,if number is 0,stop inputing.n); printf(number:); scanf(%d,&p1-num); p2-next=NULL; /*第一個結(jié)點未生成,則分配域首字節(jié)的地址(指針)為空地址*/ return(head); /*返回鏈表的頭地址*/ /*函數(shù)功能:計算每個學(xué)生的總成績和平均成績*/ void TotalScore(struct student *head) struct student *p1; p1=head; /*p1指向表頭*/while (p1!= NULL) /*若不是表尾,則循環(huán)*/ p1-total=0; for (i=0;itotal+=p1-scorei; p1-ave=p1-total/ NUM; p1=p1-next; /*讓p指向下一個節(jié)點*/ /*函數(shù)功能:交換兩個整型數(shù)*/ void IntSwap(int *pt1, int *pt2) int temp; temp = *pt1; *pt1 = *pt2; *pt2 = temp; /*函數(shù)功能:交換兩個實型數(shù)*/ void FloatSwap(float *pt1, float *pt2) float temp; temp = *pt1; *pt1 = *pt2; *pt2 = temp; /*函數(shù)功能:交換兩個字符串*/ void CharSwap(char *pt1, char *pt2) char temp15; strcpy(temp, pt1); strcpy(pt1, pt2); strcpy(pt2, temp); /*函數(shù)功能:對學(xué)生成績排序并確定名次*/ void SortScore(struct student *head) struct student *pt; int flag=0,a=0; /*flag是有沒有發(fā)生過交換的標(biāo)志*/ if(head=NULL) printf(nlist null!n); goto end; do flag=0; pt=head; /*若后一個節(jié)點的總成績比前一個節(jié)點的總成績高,則交換兩個節(jié)點中的數(shù)據(jù) 注意只交換節(jié)點數(shù)據(jù),而節(jié)點順序不變,即節(jié)點next指針內(nèi)容不進(jìn)行交換*/ while(pt-next!=NULL) if (pt-next-totalpt-total) CharSwap(pt-class_0, pt-next-class_0); IntSwap(&pt-num, &pt-next-num); CharSwap(pt-name, pt-next-name); for (i=0; iscorei, &pt-next-scorei); FloatSwap(&pt-total, &pt-next-total); FloatSwap(&pt-ave, &pt-next-ave); flag=1; pt=pt-next; while(flag); /*如果flag為0,說明第一輪沒有發(fā)生過交換,每一個結(jié)點的總分都比后一結(jié)點都大,退出*/ pt=head; while(pt!=NULL) a+; pt-order=a; pt=pt-next; end: printf(); /*函數(shù)功能:按學(xué)號插入一個結(jié)點數(shù)據(jù)*/ struct student *InsertStudent(struct student *head) struct student *p1,*p2,*info,*k; /*p1指向插入位置,p2是其前一結(jié)點,info指新插入記錄*/ int n=0; printf(input a new record,if number is 0,exit insert.n); info=(struct student *)malloc(LEN); /*申請空間*/ if(!info) printf(nout of memory! ); /*如沒有申請到,內(nèi)存溢出*/ return NULL; /*返回空指針*/ printf(number:); scanf(%d,&info-num); while(info-num!=0) /*若為0則退出輸入*/printf(class:); scanf(%s,info-class_0); printf(name:); scanf(%s,info-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); TotalScore(info); info-next=NULL; /*設(shè)后繼指針為空*/ p1=p2=head; /*將指針賦值給p1,p2*/ if(head=NULL)/*鏈表為空*/ head=info; info-next=NULL; else while(info-totaltotal)&(p1-next!=NULL) p2=p1; /*使p2指向p1剛才的結(jié)點*/ p1=p1-next; /*使p1后移一個結(jié)點*/ if(info-total=p1-total) if(head=p1) head=info; /*info作為頭指針*/ info-next=p1; /*p1作為info的后繼指針*/ else p2-next=info; /*p2的后繼指針是info*/ info-next=p1; /*info的后繼指針是p1*/ else p1-next=info; info-next=NULL; /*p1的后繼指針是info,info的后繼指針是空*/ k=head; while(k!=NULL) /*重新賦予排序號(排序號因為被插入新數(shù)據(jù)而改變)*/ n+; k-order=n; k=k-next; printf(nhave inserted the student!n); printf(number:); scanf(%d,&info-num); return(head); /*返回頭指針*/ /*函數(shù)的功能:顯示所有已經(jīng)建立好的節(jié)點的節(jié)點號和該節(jié)點中數(shù)據(jù)項內(nèi)容*/ void PrintScore(struct student *head) struct student *p=head; /*p指向表頭*/ if(head=NULL) goto end; printf(f*All students achievement statistics and rank*n);while (p!=NULL) /*若不是表尾,則循環(huán)打印*/ printf(n class:%-20s num:%-7d name:%-20sn, p-class_0, p-num,p-name); printf(n math | c_prog | english | polity | sport n); for(i=0;iscorei); printf(n total:%-7.2f ave:%-7.2f order:%dn, p-total, p-ave,p-order); printf(n); p=p-next; /*讓p指向下一個結(jié)點*/ printf(*%d students*n,n);end: printf(); /*函數(shù)功能:按學(xué)號查找并顯示一個結(jié)點數(shù)據(jù)*/ void SearchStudent(struct student *head) struct student *p=head; int b; /*存放學(xué)號的變量*/ printf(inuput the sdudent number you want to find:); scanf(%d,&b); /*輸入學(xué)號*/ if(head=NULL) printf(nlist null!n); goto end; while(p!=NULL)/*當(dāng)記錄的指針不為空時*/ if(p-num=b)/*顯示找到的記錄信息*/ printf(f*The student data search*n); printf(n class:%-20s num:%-7d name:%-20sn, p-class_0, p-num,p-name); printf(n math | c_prog | english | polity | sport n); for(i=0;iscorei); printf(n total:%-7.2f ave:%-7.2f order:%dn, p-total, p-ave,p-order); printf(*end*n); break; else p=p-next; /*移動指針,指向下一結(jié)點,繼續(xù)查找*/ if(p=NULL) /*指針為空,說明未能找到所要的結(jié)點*/ printf(can not find the sdudent number %d !n,b); end: printf(); /*函數(shù)功能:按學(xué)號查找并修改一個結(jié)點數(shù)據(jù)*/ void ModifyStudent(struct student *head) struct student *p=head; int number; /*存放學(xué)號的變量*/ printf(inuput the sdudent number you want to modify,if number is 0,exit modify.n); printf(number:); scanf(%d,&number); if(head=NULL) printf(nList null!n); goto end; while(p!=NULL)/*當(dāng)記錄的指針不為空時*/ if(p-num=number) printf(inuput new data of the student.n); printf(number:); scanf(%d,&p-num); printf(class:); scanf(%s,p-class_0); printf(name:); scanf(%s,p-name); printf(input math,c_prog,english,polity,sport score.n); for(i=0;iscorei); TotalScore(p); printf(inuput the sdudent number you want to modify,if number is 0,exit modify.n); printf(number:); scanf(%d,&number); else p=p-next; /*移動指針,指向下一結(jié)點,繼續(xù)查找*/ if(p=NULL) /*指針為空,說明未能找到所要的結(jié)點*/ printf(can not find the number %d!n,number); end: printf(); /*函數(shù)功能:按學(xué)號查找并刪除一個結(jié)點數(shù)據(jù)*/ struct student *DeleteStudent(struct student *head) struct student *p1,*p2; int number; printf(please input the number you want to deleted:); scanf(%d,&number); if(head=NULL) /*沒有數(shù)據(jù)的空鏈表*/ printf(nlist null!n); p1=head; /*優(yōu)先級從高到低- != &*/while(number!=p1-num&p1-next!=NULL) /*p1指向的不是所要找的結(jié)點,并且后面還有結(jié)點*/ p2=p1; p1=p1-next; /*p1向后移一個結(jié)點*/ if(number=p1-num) if(p1=head) head=p1-next; /*若p1指向的是首結(jié)點,把第二個結(jié)點地址賦給head*/ else p2-next=p1-next; /*否則將下一結(jié)點地址付給前一結(jié)點地址*/ printf(number %d student have been deleted!n,number); n=n-1; else printf(can not find number %d student.n,number);/*找不到該結(jié)點*/ return(head); /*文件(FILE)類型指針調(diào)用一個文件,需要以下信息:1文件當(dāng)前的讀寫位置。2與文件對應(yīng)的內(nèi)存緩沖區(qū)的地址。3文件操作方式。而這些信息是存放在緩沖文件系統(tǒng)為每一個文件開辟的“文件信息/區(qū)”內(nèi)(為一個結(jié)構(gòu)體變量),對FILE的定義是在stdio.h頭文件中,由系統(tǒng)事先指定的。其結(jié)構(gòu)如下:typedef strut short level; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned ar *curp; unsigned istemp; short token; FILE ; */*函數(shù)功能:保存數(shù)據(jù)到文件模塊*/ void SaveFile(struct student *head) FILE *fp; /*定義指向文件的指針*/ struct student *p; /* 定義移動指針*/ char outfile20; /*保存輸出文件名*/ printf(enter outfile name,it can be any file name suffix or no suffix namesn);printf(for example D:f1score.txt or just a name:n);scanf(%s,outfile); /*fopen(文件名,文件使用方式);wb(只寫)為輸出打開一個二進(jìn)制文件執(zhí)行fopen函數(shù)有一個返回值(地址值)打開操作成功,為指向被打開文件的文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址。該返回值要立即賦值給文件類型指針變量(例:FILE *fp)保存起來,否則fopen函數(shù)返回值的丟失會導(dǎo)致無法對被/打開的文件進(jìn)行操作。打開操作失敗,其返回值為NULL(即地址值為0,是一個無效的指/向)。即通過fopen函數(shù)按指定的文件操作方式(wb(只寫)打開指定的文件(outfile)。并將文件信息區(qū)(結(jié)構(gòu)體變量)的起始地址賦值給文件指針變量fp。若打開操作失敗,則fp的值為NULL,此時輸出“不能打開該文件”的提示信息, */if(fp=fopen(outfile,wb)=NULL) /*為輸出打開一個二進(jìn)制文件,如沒有則建立*/ printf(can not open file!n); return; printf(nsaving file.n); /*打開文件,提示正在保存*/ p=head; /*移動指針從頭指針開始*/ while(p!=NULL) /*如p不為空*/ fwrite(p,LEN,1,fp); /*寫入一條數(shù)據(jù)*/ p=p-next; /*指針后移*/ fclose(fp); /*關(guān)閉文件*/ printf(save success!n); /*顯示保存成功*/ /*函數(shù)功能:加載存儲在外部介質(zhì)的文件到內(nèi)存或?qū)胄畔⒛K*/ struct student *LoadFile(void) struct student *p,*q,*h=NULL; /*定義記錄指針變量*/ FILE *fp; /* 定義指向文件的指針*/ char infile20; /*保存文件名*/ printf(enter outfile name,it can be any file name suffix or no suffix namesn);printf(for example D:f1score.txt or just a name:n);scanf(%s,infile); /*輸入文件名*/ if(fp=fopen(infile,rb)=NULL) /*打開一個二進(jìn)制文件,為讀方式*/ printf(can not open file!n); /*如不能打開,返回頭指針*/ return h; printf(nloading file.n); p=(struct student *)malloc(LEN); /*申請空間*/ if(!p) printf(out of memory!n); /*如沒有申請到,則內(nèi)存溢出*/ return h; /*返回空頭指針*/ h=p; /*申請到空間,將其作為頭指針*/ while(!feof(fp) /*循環(huán)讀數(shù)據(jù)直到文件尾結(jié)束*/ if(1!=fread(p,LEN,1,fp) break; /*如果沒讀到數(shù)據(jù),跳出循環(huán)*/ p-next=(struct student *)malloc(LEN); /*為下一個結(jié)點申請空間*/ if(!p-next) printf(out of memory!n); /*如沒有申請到,則內(nèi)存溢出*/ return h; q=p; /*保存當(dāng)前結(jié)點的指針,作為下一結(jié)點的前驅(qū)*/ p=p-next; /*指針后移,新讀入數(shù)據(jù)鏈到當(dāng)前表尾*/ q-next=NULL; /*最后一個結(jié)點的后繼指針為空*/ fclose(fp); /*關(guān)閉文件*/ printf(load success!n); return h; /*返回頭指針*/ /*函數(shù)功能:顯示幫助信息和系統(tǒng)信息*/ void help()int digit; /*由于窗口面積有限,一次只能看到幾條幫助信息,故輸入1只能查看功能1.2.3的幫助信息*/ printf(input 1 and look help information of Function 1.2.3.n); printf(input 2 and look help information of Function 4.5.6.n); printf(input 3 and look help information of Function 7.8.9.0.n); scanf(%d, &digit); printf(*Help*nn); switch(digit) case 1:printf(1.Create a new list of students data n); printf(Input on academic performance and other information, and n);printf(automatically calculate a total score and grade point averagenn); printf(2.Insert a student data n); printf(Insert a record of student performance to the dynamic linked list.nn);printf(3.Output all students data n); printf(Sort highest to
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 護(hù)理病房管理
- 盜血綜合征的護(hù)理措施
- 珠寶店管理層培訓(xùn)心得
- 巧設(shè)問題情境 點燃思維火花
- 人員培訓(xùn)定人定崗分層管理
- 員工基礎(chǔ)技能培訓(xùn)
- 呼吸內(nèi)科體格檢查
- 水利設(shè)施測繪成果保密與工程管理合同
- 創(chuàng)新型餐飲企業(yè)勞動合同規(guī)范模板
- 非洲勞務(wù)派遣與醫(yī)療援助合同
- 2025年光大金甌資產(chǎn)管理有限公司招聘筆試參考題庫含答案解析
- 2025內(nèi)蒙古森工集團(tuán)第二批工作人員招聘高頻重點提升(共500題)附帶答案詳解
- 2024年出版專業(yè)資格考試《出版專業(yè)基礎(chǔ)知識》中級真題及答案
- 出師表標(biāo)準(zhǔn)注音版修正版
- 孤獨癥康復(fù)教育人員上崗培訓(xùn)練習(xí)題庫及答案
- 籃球比賽記錄表A4版
- 機械設(shè)備投入計劃及保證措施
- 小兒清熱止咳口服液產(chǎn)品知識-課件
- 鋼 筋 檢 查 記 錄 表(鋼筋加工及安裝)
- 附件9:未取得國外國籍的聲明
- 一般自我效能感量表(GSES)
評論
0/150
提交評論