【正文】
printf(\nAll students sum score is:%ld average is %\n,s,average)。 int i=0。 while(p!=NULL) { i++。amp。 STUDENT *p,*q,*t,*h1。 } while(!feof(sfp)) { if(1!=fread(p,sizeof(STUDENT),1,sfp)) break。 /**/ printf(Enter the new file name,for example c:\\f1\\:\n)。 } printf(append sucess!!\n)。 infonext=NULL。 scanf(%d,amp。 return 。 return h。 /*out of memory*/ return h。 } printf(\n Loading file!\n)。 getch()。 exit(1)。 printf(Press any key to back to Main Menu...\n)。 else qnext=info。 infonext=NULL。 scanf(%d,amp。 return NULL。 } /*insert a new record*/ STUDENT *insert(STUDENT *h) { STUDENT *p,*q,*info。 /**/ if(p==NULL) /**/ printf(\nlist no %s student\n,s)。 /* */ char s[15]。 free(p)。 else { printf(*****************************have found***************************\n)。 printf(please enter the NO to delete:\n)。 printf(|%3d |%10s|%15s|%4d|%4d|%4d| % | % | %3d |\n, i, pno,pname,pscore[0],pscore[1], pscore[2],psum,paverage,porder)。 } C/C++語言程序設(shè)計報告 16 void print(STUDENT *h) /*printf all information*/ { int i=0。 h=info。infoscore[i])。) break。 int s。 do{ printf(\n Enter you choice(014):)。 clrscr()。putch(0xba)。i44。 int c,i。\n)。 printf(1. If you want to end inputs, please enter \\ as the student number。 printf( All Rights Reserved!\n)。 printf(\n Class: Class 0704, Department of Applied Mathmatics)。 fflush(stdin)。fflush(stdin)。 case 39。 } gotoxy(1,25)。 cprintf(Student39。 char c。 case 10:head=sort(head)。 case 6:head=load()。 case 2:head=delete(head)。 int homepage()。 /*save the information as a file*/ STUDENT *load()。 /*the pointer*/ }STUDENT。 /*define student39。因為我們可以在課下自己學(xué)習。 我的主要體會如下: 1. 只看課本,只做題和實際動手差距太大了。 C/C++語言程序設(shè)計報告 6 圖 三、 設(shè)計難點與解決方法 平時編寫上機作業(yè)上的小程序時,感覺挺順利的,自以為 C 語言學(xué)得不錯了。 /*如果讀取失敗,跳出循環(huán) */ pnext=(STUDENT *)malloc(sizeof(STUDENT))。 .( 4) 函數(shù)名 : void save(STUDENT *h) 函數(shù)功能:將學(xué)生信息保存到指定的文件中 入口參數(shù):學(xué)生鏈表的頭指針 出口參數(shù):無出口參數(shù) 算法描述: fp,一個結(jié)構(gòu)體指針 p 和一個字符數(shù)組 outfile[10]。 學(xué)生學(xué)號 學(xué)生姓名 學(xué)生成績 學(xué)生總分 平均分 學(xué)生名次 指針NULL 學(xué)生學(xué)號 學(xué)生姓名 學(xué)生成績 學(xué)生總分 平均分 學(xué)生名次 指針 NEXT 學(xué)生學(xué)號 學(xué)生姓名 學(xué)生成績 學(xué)生總分 平均分 學(xué)生名次 指針 NEXT 學(xué)生學(xué)號 學(xué)生姓名 學(xué)生成績 學(xué)生總分 平均分 學(xué)生名次 指針 NEXT 頭指針 HEAD C/C++語言程序設(shè)計報告 4 ,姓名,單科成績,經(jīng)驗證符合要求后,計算出總分和平均分,名次暫設(shè)為 0,存放在 info 指向的內(nèi)存空間中; h 的值賦予 info 指向的結(jié)構(gòu)體中的 next 指針,再將 info 的值賦給h,即: infonext=h。 /*學(xué)生平均分 */ int order。進入主頁后,共有 12 個選項,分別為:系統(tǒng)初始化,輸入信息,刪除記錄,顯示信息,查找信息,將信息保存到指定文件,加載指定文件,計算學(xué)生總分和平均分,插入記錄,復(fù)制文件,成績排序,追加記錄至文件,退出。 此外,我對學(xué)生成績的管理方式十分的熟悉,這樣就可以集中精力解決算法和編程的困難,而不用再抽出時間研究相關(guān)知識,可以大大地提高程序的質(zhì)量并縮短時間。 二、 程序設(shè)計 與實現(xiàn) 1. 程序結(jié)構(gòu) 程序操作形式為菜單式操作,主要有兩大部分組成:第一部分為程序的首頁,介紹了程序的基本狀況;第二部分為程序的主體,主操作平臺,包括菜單選擇,鏈表的初始化,輸入信息,刪除記錄,增加記錄,顯示所有記錄,信息保存,文件 復(fù)制,文件加載,文件 追加, 成績求和、求均值、排序、查詢等選項。 /*學(xué)生姓名 */ int score[N]。 (1) 函數(shù)名: int menuchoice() 函數(shù)功能: 設(shè)計主菜單界面并返回用戶選擇的操作代碼 入口參數(shù): 無入口參數(shù) 出口參數(shù): 用戶選擇的操作代碼 算法描述: 首先輸出操作代碼,其次提醒用戶選擇所需要的代碼,并且屏蔽非法的輸入,最后返回正確的操作代碼值。 p 所指結(jié)構(gòu)體中的姓名和輸入的姓名是否相符,若相符,則查找成功,輸出該同學(xué)信 息并停止查找;否則, p 向后移動 一次,繼續(xù)比較。 本函數(shù)將創(chuàng)建的鏈表保存到文件中,這樣下次使用時就不必重新輸入了,涉及到了有關(guān)文件操作的知識 ,沒有很大的技巧。 /*指針后移,新讀入數(shù)據(jù)鏈到當前表尾 */ } qnext=NULL。 開始 輸入姓名 s p=h pname=s 輸出信息 p!=NULL YES YES 結(jié)束 NO p=pnext NO 查找失敗 學(xué)生成績管理系統(tǒng)設(shè)計 7 四、 設(shè)計效果與不足之處 本程序的運行效果還是不錯的,健壯性好,界面友好,易于操作,可完成許多基本的操作,具有一定的實用性(參見圖 4)。我在數(shù)學(xué)建模實踐班上課,經(jīng)常需要編程來檢驗自己的推測,如果沒有學(xué)習 C 語言,真的不敢想象結(jié)果會如何。 友好提示:請在運行程序前先閱讀程序幫助。/* the sum of the courses*/ float average。 /*display the students39。 /* copy the file*/ STUDENT *sort(STUDENT *h)。break。break。 break。 } } } } int homepage() { void contact()。 while(1) { gotoxy(10,2)。i5。: result=1。 case 39。clrscr()。 printf(\n\n)。 printf(\n\n)。 } void help() { clrscr()。\n)。 getch()。 gotoxy(10,2)。i++) { gotoxy(10,i)。i++) putch(0xcd)。 } textbackground(BLACK)。 return c。