本文目錄一覽:
- 1、請用C語言完成課程設計拜託了各位 謝謝
- 2、求一份C語言課程設計報告要求包括:系統需求分析,總體設計,詳細設計,程序調試分析。
- 3、C語言課程設計,多媒體教室管理系統
- 4、求C語言課程設計(教務信息管理系統)
- 5、C語言課程設計學生成績管理系統
請用C語言完成課程設計拜託了各位 謝謝
#include stdio.h #include stdlib.h #include string.h struct student { char name[60]; char ID[7]; int score; }; int dq(struct student st[]); void xianshi(); void bc(struct student st[]); void add(); void select(); void zz(); void chazhao(); void xhcz(); void xmcz(); void del(); void xmsc(); void xhsc(); void tj(); void px(); void bjg(); void xg(); void xhxg(); void xmxg(); void bca(); void fh(); struct student st[300]; //這個數組用來保存所有的學生信息 和文件裡面的一致 int Number=0; //記錄總的學生人數 也就是數組/文件裡面的學生人數 void main() { int choose=0; FILE *fp=NULL; char yesorno; if((fp=fopen(“C://student.dat”,”rb”))==NULL) { printf(“\n=========提示:文件不存在,是否要創建一個?(y/n)\n”); scanf(“%c”,yesorno); if(yesorno==’y’||yesorno==’Y’) { //這裡僅為了建立文件 fp=fopen(“C://student.dat”,”wb”); fclose(fp); } else exit(0); } else { Number=dq(st); //要是文件只能夠已經有數據 將數據初始化到數組中 } system(“cls”); while(true) { xianshi(); printf(“\t\t====請選擇:”); scanf(“%d”,choose); system(“cls”); switch(choose) { case 0: exit(0); //退出 break; case 1: add(); fh();//增加學生成績 break; case 2: select(); fh();//查看學生成績 break; case 3: chazhao(); fh();// 查找 break; case 4: del(); fh();//刪除 break; case 5: tj(); fh();//統計 break; case 6: px(); fh();//排序 break; case 7: bjg(); fh();//輸出不及格 break; case 8: xg(); fh();//修改 break; case 9:zz(); fh();//作者 break; case 10:bca(); fh();//保存 break; default: break; } fflush(stdin); getchar(); system(“cls”); } } void bca() { printf(“\t=====程序在運行時已自動保存…..\n”); } void fh() { printf(“\t===按Enter鍵返回主菜單\n”); } void xg() //修改學生信息 { int way=0; printf(“請選擇修改查找方式\n”); printf(“1 按姓名查找修改\n”); printf(“2 按學號查找修改\n”); scanf(“%d”,way); switch(way) { case 1: xmxg(); break; case 2: xhxg(); break; default: printf(“輸入有誤,結束!\n”); break; } } //按姓名修改 void xmxg() { FILE *fp=NULL; char name[60]; int i=0; int changeIndex=0; int index=0; printf(“請輸入要修改的學生姓名:”); scanf(“%s”,name); for (i=0;iNumber;i++) { if (strcmp(name,st[i].name)) { changeIndex=i; //保存要修改的人的下標 } break; } printf(“\t姓名\t學號\t成績\n”); printf(“\t%s\t%s\t%d\n\n”,st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score); printf(“請重新輸入該學生信息”); printf(“姓名:”); scanf(“%s”,st[changeIndex].name); printf(“學號:”); scanf(“%s”,st[changeIndex].ID); printf(“成績:”); scanf(“%d”,st[changeIndex].score); //信息修改後重新更新文件裡面的數據 以保持數據一致性 fp=fopen(“C://student.dat”,”wb”); for (i=0;iNumber;i++) { fwrite(st[i],sizeof(struct student),1,fp); } fclose(fp); } void xhxg()//按學號修改 { FILE *fp=NULL; char id[60]; int i=0; int changeIndex=0; int index=0; printf(“請輸入要修改的學生學號:”); scanf(“%s”,id); for (i=0;iNumber;i++) { if (strcmp(id,st[i].ID)) { changeIndex=i; //保存要修改的人的下標 } break; } printf(“\t姓名\t學號\t成績\n”); printf(“\t%s\t%s\t%d\n\n”,st[changeIndex].name,st[changeIndex].ID,st[changeIndex].score); printf(“請重新輸入該學生信息”); printf(“姓名:”); scanf(“%s”,st[changeIndex].name); printf(“學號:”); scanf(“%s”,st[changeIndex].ID); printf(“成績:”); scanf(“%d”,st[changeIndex].score); //信息修改後重新更新文件裡面的數據 以保持數據一致性 fp=fopen(“C://student.dat”,”wb”); for (i=0;iNumber;i++) { fwrite(st[i],sizeof(struct student),1,fp); } fclose(fp); printf(“\t=======修改成功\n”); } void bjg() //輸出不及格人數 { int i=0; printf(“以下是不及格:\n”); printf(“\t姓名\t學號\t成績\n”); for (i=0;iNumber;i++) { if (st[i].score60) { printf(“\t%s\t%s\t%d\n”,st[i].name,st[i].ID,st[i].score); } } } void px()//排序 { struct student temp; int wantNUmber=0; int i=0; int j=0; for(i=0;iNumber-1;i++) { for(j=i;jNumber-1;j++) { if(st[j].scorest[j+1].score) { temp=st[j]; st[j]=st[j+1]; st[j+1]=temp; } } } printf(“你想輸出前幾名的成績:”); scanf(“%d”,wantNUmber); if (wantNUmberNumber) { wantNUmber=Number; } printf(“\t姓名\t學號\t成績\n”); for(i=0;iwantNUmber;i++) { printf(“\t%s\t%s\t%d\n”,st[i].name,st[i].ID,st[i].score); } } void tj()//統計 { int i=0; double sum=0.0; for(i=0;iNumber;i++) { sum+=st[i].score; } printf(“全班總分為:%f\n”,sum); printf(“平均分為:%f\n”,sum/Number); } void del()//刪除 { int n=0; printf(“1 按姓名刪除\n”); printf(“2 按學號刪除\n”); scanf(“%d”,n); switch(n) { case 1: xmsc(); break; case 2: xhsc(); break; } } void xmsc()//按姓名刪除 { FILE *fp=NULL; char name[60]; int i=0; int j=0; printf(“請輸入要刪除的學生姓名:”); scanf(“%s”,name); for(i=0;iNumber;i++) { if (strcmp(name,st[i].name)==0) //如果查找到就刪除 { for (j=i;jNumber-1;j++) { st[j]=st[j+1]; } Number–; } } //將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了 fp=fopen(“C://student.dat”,”wb”); for (i=0;iNumber;i++) { fwrite(st[i],sizeof(struct student),1,fp); } fclose(fp); printf(“刪除成功;\n”); } void xhsc()//按學號刪除 { FILE *fp=NULL; char id[60]; int i=0; int j=0; printf(“請輸入要刪除的學生學號:”); scanf(“%s”,id); for(i=0;iNumber;i++) { if (strcmp(id,st[i].ID)==0) //如果查找到就刪除 { for (j=i;jNumber-1;j++) { st[j]=st[j+1]; } Number–; } } //將剩餘數據寫入文件 重新一寫的方式打開文件 把以前的數據擦除了 fp=fopen(“C://student.dat”,”wb”); for (i=0;iNumber;i++) { fwrite(st[i],sizeof(struct student),1,fp); } fclose(fp); printf(“刪除成功;\n”); } void chazhao()//查找學生 { int n=0; printf(“1 按姓名查找\n”); printf(“2 按學號查找\n”); scanf(“%d”,n); switch(n) { case 1: xmcz(); break; case 2: xhcz(); break; default: printf(“輸入有誤,結束!\n”); break; } } void xhcz()//按學號查找 { char id[7]; int i=0; printf(“請輸入要查找學生學號:”); scanf(“%s”,id); system(“cls”); printf(“\t姓名\t學號\t成績\n”); for (i=0;iNumber;i++) { if (strcmp(id,st[i].ID)==0) { printf(“\t%s\t%s\t%d\n”,st[i].name,st[i].ID,st[i].score); } } } void xmcz()//按姓名查找 { char name[7]; int i=0; printf(“請輸入要查找學生姓名:”); scanf(“%s”,name); system(“cls”); printf(“\t姓名\t學號\t成績\n”); for (i=0;iNumber;i++) { if (strcmp(name,st[i].name)==0) { printf(“\t%s\t%s\t%d\n”,st[i].name,st[i].ID,st[i].score); } } } void zz() { printf(“\t**********************************************************\n\n”); printf(“\t^^^^^^^^^^ 武漢工程大學郵電與信息工程學院 ^^^^^^^^^^\n\n”); printf(“\t^^^^^^^^^ 07網路與安全管理2班 ^^^^^^^^^\n\n”); printf(“\t^^^^^^^^ 易樊製作 ^^^^^^^^\n\n”); printf(“\t^^^^^^^^^ 禁止CTRL+C 謝謝合作 ^^^^^^^^^\n\n”); printf(“\t^^^^^^^^^^ QQ:895115828\n\n”); printf(“\t**********************************************************\n\n”); } void select()//查看學生 { int i=0; printf(“以下是全部學生成績\n”); printf(“\t姓名\t學號\t成績\n”); for(i=0;iNumber;i++) { printf(“\t%s\t%s\t%d\n”,st[i].name,st[i].ID,st[i].score); } } void add()//增加學生 { int numberTemp=0; int i=0; struct student temp; //臨時保存信息 printf(“請輸入要增加學生成績個數:”); scanf(“%d”,numberTemp); for(i=0;inumberTemp;i++) { printf(“輸入第%d個同學信息\n”,i+1); printf(“姓名:”); scanf(“%s”,temp.name); printf(“學號:”); scanf(“%s”,temp.ID); printf(“成績:”); scanf(“%d”,temp.score); st[Number++]=temp; //將剛添加的寫入到數組 bc(temp); //將剛添加的寫入到文件 } printf(“添加成功\n”); } void bc(struct student *st) { FILE *fp=NULL; fp=fopen(“C://student.dat”,”ab+”); fwrite(st,sizeof(struct student),1,fp); fclose(fp); } int dq(struct student st[]) { FILE *fp=NULL; int i=0; fp=fopen(“C://student.dat”,”rb”); while(fread(st[i],sizeof(struct student),1,fp)) i++; fclose(fp); return i; } void xianshi() { printf(“\t*****************************************************************\n”); printf(“\t* *\n”); printf(“\t* 學生成績管理系統 *\n”); printf(“\t* *\n”); printf(“\t* [1] 增加學生成績 [2] 查看學生成績 *\n”); printf(“\t* [3] 查找學生成績 [4] 刪除學生成績 *\n”); printf(“\t* [5] 統計(總成績和平均分) [6] 輸出前N名學生成績 *\n”); printf(“\t* [7] 輸出不及格人數 [8] 修改學生信息 *\n”); printf(“\t* [9] 關於作者 [10] 保存數據 *\n”); printf(“\t* [0] 退出系統 *\n”); printf(“\t*****************************************************************\n”); } 稍微改下就可以了,祝你成功!~
求一份C語言課程設計報告要求包括:系統需求分析,總體設計,詳細設計,程序調試分析。
C語言課程設計任務書
一、題目: 學生成績管理
二、目的與要求
1. 目的:
(1)基本掌握面向過程程序設計的基本思路和方法;
(2)達到熟練掌握C語言的基本知識和技能;
(3)能夠利用所學的基本知識和技能,解決簡單的程序設計問題
2. 要求
基本要求:
1. 要求利用C語言面向過程的編程思想來完成系統的設計;
2. 突出C語言的函數特徵,以多個函數實現每一個子功能;
3. 畫出功能模塊圖;
4. 進行簡單界面設計,能夠實現友好的交互;
5. 具有清晰的程序流程圖和數據結構的詳細定義;
6. 熟練掌握C語言對文件的各種操作。
創新要求:
在基本要求達到後,可進行創新設計,如系統用戶功能控制,對管理員級和一般級別的用戶系統功能操作不同
三、信息描述
輸入一個班10個學生的學號和每個學生考試三門功課(數學、英語、計算機基礎)的成績。編程計算出每個學生的總分和平均分,並按學生成績優劣排序,最後列印一張按高分到低分名次排序的成績單。要求:
1)排序用一個函數實現。
2)列印的成績單表項包括:序號,學號、數學、英語、計算機、總分、平均分。
3)按實驗報告電子模板格式填寫實驗內容。
四、功能描述
1. 學生基本信息及成績所選科目成績的錄入。
2. 基本信息的查詢(分系、班級;分科目)與修改。
3. 對每系或每班各科成績進行分析(即求單科平均成績、及格率和優秀率);
4. 對所開課程的成績分析(求其平均成績,最高分和最低分);
5. 對學生考試成績進行排名(單科按系別或班級進行排名,對每一個班級,同一學期學生總體成績進行排名,並顯示各科成績信息)
五、解決方案
1. 分析程序的功能要求,劃分程序功能模塊。
2. 畫出系統流程圖。
3. 代碼的編寫。定義數據結構和各個功能子函數。
4. 程序的功能調試。
5. 完成系統總結報告以及使用說明書
六、進度安排
此次課程設計時間為兩周,分四個階段完成:
1. 分析設計階段。指導教師應積極引導學生自主學習和鑽研問題,明確設計要求,找出實現方法,按照需求分析、總體設計、詳細設計這幾個步驟進行。
2. 編碼調試階段:根據設計分析方案編寫C代碼,然後調試該代碼,實現課題要求的功能。
3. 總結報告階段:總結設計工作,寫出課程設計說明書,要求學生寫出需求分析、總體設計、詳細設計、編碼、測試的步驟和內容。
4. 考核階段。
#include stdio.h
#include stdlib.h
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
};
/*排序用一個函數來實現*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i n-1; i++)
for(int j = i+1 ; j n; j++)
{
if(stu[i].total stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*創建結構體數組中有10個元素,分別用來保存這10個人的相關信息。*/
/*輸入這十個學生的相關信息*/
for(int i = 0; iSTU_NUM; i++)
{
printf(“請輸入第%d個學生的學號:”,i+1);
scanf(“%s”,stu[i].stu_id);
printf(“輸入第%d個學生的數學成績:”,i+1);
scanf(“%f”,stu[i].score[0]);
printf(“輸入第%d個學生的英語成績:”,i+1);
scanf(“%f”,stu[i].score[1]);
printf(“輸入第%d個學生的計算機成績:”,i+1);
scanf(“%f”,stu[i].score[2]);
stu[i].total = stu[i].score[0]+stu[i].score[1]+stu[i].score[2];
stu[i].aver = stu[i].total/3;
}
printf(“\n”);
SortScore(stu,STU_NUM);/*調用排序函數*/
/*輸出排序後的各學生的成績*/
for(i = 0 ; i STU_NUM; i++)
{
printf(“序號: %d\t”,i);
printf(“學號:%s\t”,stu[i].stu_id);
printf(“數學:%f\t”,stu[i].score[0]);
printf(“英語:%f\t”,stu[i].score[1]);
printf(“計算機:%f\t”,stu[i].score[2]);
printf(“平均成績:%f\t”,stu[i].aver);
printf(“總分:%f\t”,stu[i].total);
printf(“\n\n”);
}
return 0;
}
註:(源程序中主要標識符含義說明)
#define STU_NUM 10 /*宏定義學生的數量*/
struct student /*定義一個結構體用來存放學生學號、三門課成績、總分及平均成績*/
{
char stu_id[20]; /*學生學號;*/
float score[3]; /*三門課成績;*/
float total; /*總成績;*/
float aver; /*平均成績;*/
}
實驗結果:
輸入 :(只輸入後面的數字,前面的文字是自己產生的)。
請輸入第1個學生的學號:001
輸入第1個學生的數學成績:1
輸入第1個學生的英語成績:1
輸入第1個學生的計算機成績:1
請輸入第2個學生的學號:002
輸入第2個學生的數學成績:2
輸入第2個學生的英語成績:2
輸入第2個學生的計算機成績:2
請輸入第3個學生的學號:003
輸入第3個學生的數學成績:3
輸入第3個學生的英語成績:3
輸入第3個學生的計算機成績:3
請輸入第4個學生的學號:004
輸入第4個學生的數學成績:4
輸入第4個學生的英語成績:4
輸入第4個學生的計算機成績:4
請輸入第5個學生的學號:005
輸入第5個學生的數學成績:5
輸入第5個學生的英語成績:5
輸入第5個學生的計算機成績:5
請輸入第6個學生的學號:006
輸入第6個學生的數學成績:6
輸入第6個學生的英語成績:6
輸入第6個學生的計算機成績:6
請輸入第7個學生的學號:007
輸入第7個學生的數學成績:7
輸入第7個學生的英語成績:7
輸入第7個學生的計算機成績:7
請輸入第8個學生的學號:008
輸入第8個學生的數學成績:8
輸入第8個學生的英語成績:8
輸入第8個學生的計算機成績:8
請輸入第9個學生的學號:009
輸入第9個學生的數學成績:9
輸入第9個學生的英語成績:9
輸入第9個學生的計算機成績:9
請輸入第10個學生的學號:010
輸入第10個學生的數學成績:10
輸入第10個學生的英語成績:10
輸入第10個學生的計算機成績:10
輸出:
序號: 0 學號:010 數學:10.000000 英語:10.000000 計算機:10.000000
平均成績:10.000000 總分:30.000000
序號: 1 學號:009 數學:9.000000 英語:9.000000 計算機:9.000000
平均成績:9.000000 總分:27.000000
序號: 2 學號:008 數學:8.000000 英語:8.000000 計算機:8.000000
平均成績:8.000000 總分:24.000000
序號: 3 學號:007 數學:7.000000 英語:7.000000 計算機:7.000000
平均成績:7.000000 總分:21.000000
序號: 4 學號:006 數學:6.000000 英語:6.000000 計算機:6.000000
平均成績:6.000000 總分:18.000000
序號: 5 學號:005 數學:5.000000 英語:5.000000 計算機:5.000000
平均成績:5.000000 總分:15.000000
序號: 6 學號:004 數學:4.000000 英語:4.000000 計算機:4.000000
平均成績:4.000000 總分:12.000000
序號: 7 學號:003 數學:3.000000 英語:3.000000 計算機:3.000000
平均成績:3.000000 總分:9.000000
序號: 8 學號:002 數學:2.000000 英語:2.000000 計算機:2.000000
平均成績:2.000000 總分:6.000000
序號: 9 學號:001 數學:1.000000 英語:1.000000 計算機:1.000000
平均成績:1.000000 總分:3.000000
七、撰寫課程設計報告或課程設計總結
課程設計報告要求:
總結報告包括需求分析、總體設計、詳細設計、編碼(詳細寫出編程步驟)、測試的步驟和內容、課程設計總結、參考資料等,不符合以上要求者,則本次設計以不及格記。
C語言常見錯誤
書寫標識符時,忽略了大小寫字母的區別
main()
{
int a=5;
printf(“%d”,A);
}
編譯程序把a和A認為是兩個不同的變數名,而顯示出錯信息。C認為大寫字母和小寫字母是兩個不同的字元。習慣上,符號常量名用大寫,變數名用小寫表示,以增加可讀性。
2.忽略了變數的類型,進行了不合法的運算。
main()
{
float a,b;
printf(“%d”,a%b);
}
%是求余運算,得到a/b的整餘數。整型變數a和b可以進行求余運算,而實型變數則不允許進行「求余」運算。
3.將字元常量與字元串常量混淆。
char c;
c=”a”;
在這裡就混淆了字元常量與字元串常量,字元常量是由一對單引號括起來的單個字元,字元串常量是一對雙引號括起來的字元序列。C規定以「\」作字元串結束標誌,它是由系統自動加上的,所以字元串「a」實際上包含兩個字元:『a’和『\’,而把它賦給一個字元變數是不行的。
4.忽略了「=」與「==」的區別。
在許多高級語言中,用「=」符號作為關係運算符「等於」。如在BASIC程序中可以寫
if (a=3) then …
但C語言中,「=」是賦值運算符,「==」是關係運算符。如:
if (a==3) a=b;
前者是進行比較,a是否和3相等,後者表示如果a和3相等,把b值賦給a。由於習慣問題,初學者往往會犯這樣的錯誤。
5.忘記加分號。
分號是C語句中不可缺少的一部分,語句末尾必須有分號。
a=1
b=2
編譯時,編譯程序在「a=1」後面沒發現分號,就把下一行「b=2」也作為上一行語句的一部分,這就會出現語法錯誤。改錯時,有時在被指出有錯的一行中未發現錯誤,就需要看一下上一行是否漏掉了分號。
{ z=x+y;
t=z/100;
printf(“%f”,t);
}
對於複合語句來說,最後一個語句中最後的分號不能忽略不寫(這是和PASCAL不同的)。
6.多加分號。
對於一個複合語句,如:
{ z=x+y;
t=z/100;
printf(“%f”,t);
};
複合語句的花括弧後不應再加分號,否則將會畫蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,則I加1。但由於if (a%3==0)後多加了分號,則if語句到此結束,程序將執行I++語句,不論3是否整除a,I都將自動加1。
再如:
for (I=0;I5;I++);
{scanf(“%d”,x);
printf(“%d”,x);}
本意是先後輸入5個數,每輸入一個數後再將它輸出。由於for()後多加了一個分號,使循環體變為空語句,此時只能輸入一個數並輸出它。
7.輸入變數時忘記加地址運算符「」。
int a,b;
scanf(“%d%d”,a,b);
這是不合法的。Scanf函數的作用是:按照a、b在內存的地址將a、b的值存進去。「a」指a在內存中的地址。
8.輸入數據的方式與要求不符。①scanf(“%d%d”,a,b);
輸入時,不能用逗號作兩個數據間的分隔符,如下面輸入不合法:
3,4
輸入數據時,在兩個數據之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。
②scanf(“%d,%d”,a,b);
C規定:如果在「格式控制」字元串中除了格式說明以外還有其它字元,則在輸入數據時應輸入與這些字元相同的字元。下面輸入是合法的:
3,4
此時不用逗號而用空格或其它字元是不對的。
3 4 3:4
又如:
scanf(“a=%d,b=%d”,a,b);
輸入應如以下形式:
a=3,b=4
9.輸入字元的格式與要求不一致。
在用「%c」格式輸入字元時,「空格字元」和「轉義字元」都作為有效字元輸入。
scanf(“%c%c%c”,c1,c2,c3);
如輸入a b c
字元「a」送給c1,字元「 」送給c2,字元「b」送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。
10.輸入輸出的數據類型與所用格式說明符不一致。
例如,a已定義為整型,b定義為實型
a=3;b=4.5;
printf(“%f%d\n”,a,b);
編譯時不給出出錯信息,但運行結果將與原意不符。這種錯誤尤其需要注意。
11.輸入數據時,企圖規定精度。
scanf(“%7.2f”,a);
這樣做是不合法的,輸入數據時不能規定精度。
12.switch語句中漏寫break語句。
例如:根據考試成績的等級列印出百分制數段。
switch(grade)
{ case ‘A’:printf(“85~100\n”);
case ‘B’:printf(“70~84\n”);
case ‘C’:printf(“60~69\n”);
case ‘D’:printf(“60\n”);
default:printf(“error\n”);
由於漏寫了break語句,case只起標號的作用,而不起判斷作用。因此,當grade值為A時,printf函數在執行完第一個語句後接著執行第二、三、四、五個printf函數語句。正確寫法應在每個分支後再加上「break;」。例如
case ‘A’:printf(“85~100\n”);break;
13.忽視了while和do-while語句在細節上的區別。
(1)main()
{int a=0,I;
scanf(“%d”,I);
while(I=10)
{a=a+I;
I++;
}
printf(“%d”,a);
}
(2)main()
{int a=0,I;
scanf(“%d”,I);
do
{a=a+I;
I++;
}while(I=10);
printf(“%d”,a);
}
可以看到,當輸入I的值小於或等於10時,二者得到的結果相同。而當I10時,二者結果就不同了。因為while循環是先判斷後執行,而do-while循環是先執行後判斷。對於大於10的數while循環一次也不執行循環體,而do-while語句則要執行一次循環體。
14.定義數組時誤用變數。
int n;
scanf(“%d”,n);
int a[n];
數組名後用方括弧括起來的是常量表達式,可以包括常量和符號常量。即C不允許對數組的大小作動態定義。
15.在定義數組時,將定義的「元素個數」誤認為是可使的最大下標值。
main()
;
printf(“%d”,a[10]);
}
C語言規定:定義時用a[10],表示a數組有10個元素。其下標值由0開始,所以數組元素a[10]是不存在的。
16.初始化數組時,未使用靜態存儲。
int a[3]=;
這樣初始化數組是不對的。C語言規定只有靜態存儲(static)數組和外部存儲(exterm)數組才能初始化。應改為:
static int a[3]=;
17.在不應加地址運算符的位置加了地址運算符。
scanf(“%s”,str);
C語言編譯系統對數組名的處理是:數組名代表該數組的起始地址,且scanf函數中的輸入項是字元數組名,不必要再加地址符。應改為:
scanf(“%s”,str);
18.同時定義了形參和函數中的局部變數。
int max(x,y)
int x,y,z;
{z=xy?x:y;
return(z);
}
形參應該在函數體外定義,而局部變數應該在函數體內定義。應改為:
int max(x,y)
int x,y;
{int z;
z=xy?x:y;
return(z);
}
C語言心得體會
通過這次實訓,增加了我學習軟體技術的興趣,雖然還不明確軟體技術包含的具體內容,但從C語言這門課程開始,已發現程序設計的樂趣,在學習C語言的過程中也學到了許多計算機應用基礎知識,對計算機的機體也有了一個大體的了解。
這次實訓是老師給了范常式序,經過自己的改寫,實現要求。先做簡單的輸出,一步步的再做其它圖案,在實際操作過程中犯的一些錯誤還會有意外的收穫,感覺實訓很有意思。在具體操作中對這學期所學的C語言的理論知識得到鞏固,達到實訓的基本目的,也發現自己的不足之出,在以後的上機中應更加註意,同時體會到C語言具有的語句簡潔,使用靈活,執行效率高等特點。發現上機實訓的重要作用,特別是對數組和循環有了深刻的理解。
通過實際操作,學會 C語言程序編程的基本步驟、基本方法,開發了自己的邏輯思維能力,培養了分析問題、解決問題的能力。深刻體會到「沒有做不到的,只有想不到的」,「團結就是力量」,「實踐是檢驗真理的標準」,「不恥下問」……的寓意。
計時在此希望以後應多進行這樣的實訓,加長設間,培養學生獨立思考問題的能力,提高實際操作水平。
八、參考資料 :《C語言程序設計教程》
C語言課程設計,多媒體教室管理系統
只作為參考,網上太難找,只能自己去改咯!
#include “stdio.h”
#include “stdlib.h”
#include “string.h”
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};
typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;
void menu()
{
printf(“********************************************************************************”);
printf(“\t1登記學生資料\t\t\t\t\t2刪除學生資料\n”);
printf(“\t3查詢學生資料\t\t\t\t\t4修改學生資料\n”);
printf(“\t5保存學生資料\t\t\t\t\t0退出系統\n”);
printf(“********************************************************************************\n”);
}
void printstart()
{
printf(“———————————————————————–\n”);
}
void Wrong()
{
printf(“\n=====提示:輸入錯誤!\n”);
}
void Nofind()
{
printf(“\n=====提示:沒有找到該學生!\n”);
}
void printc() /* 本函數用於輸出中文 */
{
printf(” 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n”);
}
void printe(Node *p)/* 本函數用於輸出英文 */
{
printf(“%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n”,p-data.num,p-data.name,p-data.sex,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave);
}
Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */
{
Node *r;
if(strcmp(nameornum,”num”)==0) /* 按學號查詢 */
{
r=l-next;
while(r!=NULL)
{
if(strcmp(r-data.num,findmess)==0)
return r;
r=r-next;
}
}
else if(strcmp(nameornum,”name”)==0) /* 按姓名查詢 */
{
r=l-next;
while(r!=NULL)
{
if(strcmp(r-data.name,findmess)==0)
return r;
r=r-next;
}
}
return 0;
}
void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l-next;
while(r-next!=NULL)
r=r-next; /* 將指針置於最末尾 */
while(1)
{
printf(“請你輸入學號(以’0’返回上一級菜單:)”);
scanf(“%s”,num);
if(strcmp(num,”0″)==0)
break;
while(s)
{
if(strcmp(s-data.num,num)==0)
{
printf(“=====提示:學號為’%s’的學生已經存在,若要修改請你選擇’4 修改’!\n”,num);
printstart();
printc();
printe(s);
printstart();
printf(“\n”);
return;
}
s=s-next;
}
p=(Node *)malloc(sizeof(Node));
strcpy(p-data.num,num);
printf(“請你輸入姓名:”);
scanf(“%s”,p-data.name);
getchar();
printf(“請你輸入性別:”);
scanf(“%s”,p-data.sex);
getchar();
printf(“請你輸入c語言成績:”);
scanf(“%d”,p-data.cgrade);
getchar();
printf(“請你輸入數學成績:”);
scanf(“%d”,p-data.mgrade);
getchar();
printf(“請你輸入英語成績:”);
scanf(“%d”,p-data.egrade);
getchar();
p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade;
p-data.ave=p-data.totle / 3;
/* 信息輸入已經完成 */
p-next=NULL;
r-next=p;
r=p;
shoudsave=1;
}
}
void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20];
Node *p;
if(!l-next)
{
printf(“\n=====提示:沒有資料可以查詢!\n”);
return;
}
printf(“\n=====1按學號查找\n=====2按姓名查找\n”);
scanf(“%d”,sel);
if(sel==1)/* 學號 */
{
printf(“請你輸入要查找的學號:”);
scanf(“%s”,findmess);
p=Locate(l,findmess,”num”);
if(p)
{
printf(“\t\t\t\t查找結果\n”);
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf(“請你輸入要查找的姓名:”);
scanf(“%s”,findmess);
p=Locate(l,findmess,”name”);
if(p)
{
printf(“\t\t\t\t查找結果\n”);
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l-next)
{
printf(“\n=====提示:沒有資料可以刪除!\n”);
return;
}
printf(“\n=====1按學號刪除\n=====2按姓名刪除\n”);
scanf(“%d”,sel);
if(sel==1)
{
printf(“請你輸入要刪除的學號:”);
scanf(“%s”,findmess);
p=Locate(l,findmess,”num”);
if(p)
{
r=l;
while(r-next!=p)
r=r-next;
r-next=p-next;
free(p);
printf(“\n=====提示:該學生已經成功刪除!\n”);
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf(“請你輸入要刪除的姓名:”);
scanf(“%s”,findmess);
p=Locate(l,findmess,”name”);
if(p)
{
r=l;
while(r-next!=p)
r=r-next;
r-next=p-next;
free(p);
printf(“\n=====提示:該學生已經成功刪除!\n”);
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l-next)
{
printf(“\n=====提示:沒有資料可以修改!\n”);
return;
}
printf(“請你輸入要修改的學生學號:”);
scanf(“%s”,findmess);
p=Locate(l,findmess,”num”);
if(p)
{
printf(“請你輸入新學號(原來是%s):”,p-data.num);
scanf(“%s”,p-data.num);
printf(“請你輸入新姓名(原來是%s):”,p-data.name);
scanf(“%s”,p-data.name);
getchar();
printf(“請你輸入新性別(原來是%s):”,p-data.sex);
scanf(“%s”,p-data.sex);
printf(“請你輸入新的c語言成績(原來是%d分):”,p-data.cgrade);
scanf(“%d”,p-data.cgrade);
getchar();
printf(“請你輸入新的數學成績(原來是%d分):”,p-data.mgrade);
scanf(“%d”,p-data.mgrade);
getchar();
printf(“請你輸入新的英語成績(原來是%d分):”,p-data.egrade);
scanf(“%d”,p-data.egrade);
p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade;
p-data.ave=p-data.totle/3;
printf(“\n=====提示:資料修改成功!\n”);
shoudsave=1;
}
else
Nofind();
}
void Disp(Link l)
{
int count=0;
Node *p;
p=l-next;
if(!p)
{
printf(“\n=====提示:沒有資料可以顯示!\n”);
return;
}
printf(“\t\t\t\t顯示結果\n”);
printstart();
printc();
printf(“\n”);
while(p)
{
printe(p);
p=p-next;
}
printstart();
printf(“\n”);
}
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */
Node *r=l-next;
if(!r)
{
printf(“\n=====提示:沒有資料可以統計!\n”);
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r-data.cgrade=pc-data.cgrade)
pc=r;
if(r-data.mgrade=pm-data.mgrade)
pm=r;
if(r-data.egrade=pe-data.egrade)
pe=r;
if(r-data.totle=pt-data.totle)
pt=r;
if(r-data.ave=pa-data.ave)
pa=r;
r=r-next;
}
printf(“——————————統計結果——————————–\n”);
printf(“總分最高者:\t%s %d分\n”,pt-data.name,pt-data.totle);
printf(“平均分最高者:\t%s %d分\n”,pa-data.name,pa-data.ave);
printf(“英語最高者:\t%s %d分\n”,pe-data.name,pe-data.egrade);
printf(“數學最高者:\t%s %d分\n”,pm-data.name,pm-data.mgrade);
printf(“c語言最高者:\t%s %d分\n”,pc-data.name,pc-data.cgrade);
printstart();
}
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll-next=NULL;
if(l-next==NULL)
{
printf(“\n=====提示:沒有資料可以排序!\n”);
return ;
}
p=l-next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s-data=p-data;
s-next=NULL;
rr=ll;
while(rr-next!=NULL rr-next-data.totle=p-data.totle)
rr=rr-next;
if(rr-next==NULL)
rr-next=s;
else
{
s-next=rr-next;
rr-next=s;
}
p=p-next;
}
free(l);
l-next=ll-next;
printf(“\n=====提示:排序已經完成!\n”);
}
void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen(“c:\\student”,”wb”);
if(fp==NULL)
{
printf(“\n=====提示:重新打開文件時發生錯誤!\n”);
exit(1);
}
p=l-next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p-next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf(“\n=====提示:文件保存成功.(有%d條記錄已經保存.)\n”,count);
shoudsave=0;
}
fclose(fp);
}
void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
l=(Node*)malloc(sizeof(Node));
l-next=NULL;
r=l;
fp=fopen(“C:\\student”,”rb”);
if(fp==NULL)
{
printf(“\n=====提示:文件還不存在,是否創建?(y/n)\n”);
scanf(“%c”,jian);
if(jian==’y’||jian==’Y’)
fp=fopen(“C:\\student”,”wb”);
else
exit(0);
}
printf(“\n=====提示:文件已經打開,正在導入記錄……\n”);
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p-next=NULL;
r-next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}
fclose(fp); /* 關閉文件 */
printf(“\n=====提示:記錄導入完畢,共導入%d條記錄.\n”,count);
while(1)
{
menu();
printf(“請你選擇操作:”);
scanf(“%d”,sel);
if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf(“\n=====提示:資料已經改動,是否將改動保存到文件中(y/n)?\n”);
scanf(“%c”,ch);
if(ch==’y’||ch==’Y’)
Save(l);
}
printf(“\n=====提示:你已經退出系統,再見!\n”);
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2:Del(l);break;/* 刪除學生 */
case 3:Qur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf(“\t\t\t==========幫助信息==========\n”);break;
default: Wrong();getchar();break;
}
}
}
/* */
求C語言課程設計(教務信息管理系統)
/*————-1————-*/
#includebios.h
#includedos.h /*頭文件*/
#includeconio.h
#includectype.h
#includeprocess.h
#includestdlib.h
#includestdio.h
#includestring.h
#define NULL 0
#define ESC 0x001b /* 退出 */
#define F1 0x3b00 /* 查看幫助信息,調用HelpMassage()函數 */
#define F2 0x3c00 /*輸入學生成績*/
#define F3 0x3d00 /*按學號查找*/
#define F4 0x3e00 /*按姓名查找*/
#define F5 0x3f00 /*列出所有學生成績*/
#define F6 0x4000 /*統計*/
struct stuType /*定義結構體變數*/
{
char NO[11]; /*學號長度為10*/
char XM[10];
char AGE[2]; /*年齡長度為2*/
float CJ[4]; /*包含4門成績*/
};
/*————-2————-*/
int JY_NO(char *stu_num,FILE *fp) /*檢驗學號的正確性*/
{ struct stuType stud;
int NO;
char *p=stu_num;
if(strcmp(stu_num,”#”)==0) return 1; /*若輸入”#”返回真值,不再循環輸入*/
while(*p!=’\0′) /*學號必須是數字,否則返回重新輸入*/
{ NO=(int)*p;
if(NO48||NO57)
{ puts(“\t\tUndefined SN!Please input again!\n”);/*非法學號!請重新輸入!*/
return 0;
}
else p++; /*指針加1*/
}
if(strlen(stu_num)!=10) /*若學號長度不為10,則返回重新輸入*/
{ puts(“\t\tLength of SN Error!\n”);/*學號長度不對*/
return 0;
}
if(getchar()!=’\n’) /*若學號後面的字元不是回車符,則學號長度大於10*/
{ printf(“\t\tThe length of SN should more than 10!Please input again!\n”);/*學號長度大於10個,請重新輸入*/
do{}while(getchar()!=’\n’); /*用getchar接收多餘的字元*/
return 0;
}
else
{
rewind(fp); /*使文件指針指向頭*/
while(!feof(fp)) /*若文件指針未到結尾,就繼續執行下面的循環,feof遇到文件結束符返回非零值,否則返回0*/
{ fread(stud,sizeof(struct stuType),1,fp); /*讀取一定長度的數據*/
if(strcmp(stu_num,stud.NO)==0) /*學號的唯一性*/
{ printf(“\t\t Repeat SN,Please input again!\n”);/*學號重複!請重新輸入*/
printf(“\t\tThe Record of this student:\n”);/*該學生成績如下*/
printf(“\t\tChinese:%.1f\n”,stud.CJ[0]);/*語文*/
printf(“\t\tMath:%.1f\n”,stud.CJ[1]);/*數學*/
printf(“\t\tEnglish:%.1f\n”,stud.CJ[2]);/*英語*/
printf(“\t\tTotal:%.1f\n”,stud.CJ[3]);/*總評*/
return 0;
}
}
}
return 1;
}
/*————-3————-*/
int JY_NO2(char *stu_num) /*檢驗學號*/
{ int NO;
char *p=stu_num;
if(strcmp(stu_num,”#”)==0)return 1; /*若輸入「#」,則返回真值結束*/
if(strlen(stu_num)!=10) /*學號長度不為10*/
{ puts(“\t\tLength of SN Error!\n”);/*學號長度不對*/
return 0;
}
while(*p!=’\0′) /*學號必須用數字,若包含有字母,或其它字元則返回假值重新輸入*/
{ NO=(int)*p;
if(NO48||NO57)
{ puts(“\t\tUndefined SN!Please input again!\n”);/*非法學號!請重新輸入*/
return 0;
}
else p++; /*指針加1*/
}
if(getchar()!=’\n’) /*檢驗學號長度是否大於10,並把多餘的字元去掉*/
{ printf(“\t\tThe length of SN should more than 10!Please input again!\n”);/*學號長度大於10個,請重新輸入*/
do{}while(getchar()!=’\n’);
return 0;
}
return 1;
}
/*————-4————-*/
int JY_XM(char *stu_XM) /*檢驗姓名*/
{ int PD;
char *p;
p=stu_XM;
while(*p!=’\0′) /*姓名只能用英文*/
{
PD=(int)*p;
if(PD0)
{ puts(“\t\tName should use English, Please input again!\n”);/*姓名只能用英文請重新輸入*/
return 0;
}
else p++; /*使指針加1,指向下一漢字*/
}
if(getchar()!=’\n’) /*姓名長度不得大於5個*/
{ printf(“\t\tThe length of Name is more than 5, Please input again!\n”);/*姓名長度大於5個請重新輸入*/
do{}while(getchar()!=’\n’);
return 0;
}
return 1; /*字元串全為漢字返回真*/
}
/*————-5————-*/
int JY_AGE(float stu_AGE) /*年齡只能在0~100之間*/
{
if(stu_AGE0||stu_AGE100)
{ printf(“\t\tInput Error! Record should between 0~100!\n”);/*輸入錯誤,成績只能在0~100之間*/
return 0;
}
return 1;
}
/*————-6————-*/
int JY_CJ(float stu_CJ) /*學生成績只能在0~100之間*/
{
if(stu_CJ0||stu_CJ100)
{ printf(“\t\tInput Error! Record should between 0~100!\n”);/*輸入錯誤,成績只能在0~100之間*/
return 0;
}
return 1;
}
/*————-7————-*/
void CreatFile() /*輸入文件*/
{ FILE *fp;
struct stuType stu,stu0={“”,””,}; /*對stu0xianfuzhi*/
fp=fopen(“stu.dat”,”wb+”); /*打開或創建一個二進位文件,打開時將原來的內容刪除*/
if(fp==NULL)
{ printf(“\t\tFile opens Error!\n\t\t\tPress Anykey back…”);/*文件打開失敗,按任意鍵返回*/
getch();
return;
}
else
{ while(1)
{ stu=stu0;
do{ printf(“\n\t\tPlease input SN:”); /*輸入學號並檢驗其正確性*/
scanf(“%10s”,stu.NO);
}while(!JY_NO(stu.NO,fp));
if(strcmp(stu.NO,”#”)==0)break;
do{ printf(“\n\t\tPlease input Name:”); /*輸入姓名並檢驗其正確性*/
scanf(“%10s”,stu.XM);
}while(!JY_XM(stu.XM));
do{ printf(“\n\t\tPlease input age:”); /*輸入年齡績並檢驗其正確性*/
scanf(“%f”,stu.AGE);
}while(!JY_AGE(stu.AGE[0]));
do{ printf(“\n\t\tPlease input record of Chinese:”); /*輸入成績並檢驗其正確性*/
scanf(“%f”,stu.CJ[0]);
}while(!JY_CJ(stu.CJ[0]));
do{ printf(“\n\t\tPlease input record of Math:”); /*同上*/
scanf(“%f”,stu.CJ[1]);
}while(!JY_CJ(stu.CJ[1]));
do{ printf(“\n\t\tPlease input record of English:”);
scanf(“%f”,stu.CJ[2]);
}while(!JY_CJ(stu.CJ[2]));
do{ printf(“\n\t\tPlease input record of Total:”);
scanf(“%f”,stu.CJ[3]);
}while(!JY_CJ(stu.CJ[3]));
fwrite(stu,sizeof(struct stuType),1,fp); /*寫文件*/
}
}
fclose(fp); /*關閉文件*/
}
/*————-8————-*/
void Search_Xuehao() /*按學號查詢*/
{ FILE *fp;
int flag;
struct stuType stu,stud;
fp=fopen(“stu.dat”,”rb”);
if(fp==NULL) /*若文件打不開則輸出下面的信息*/
{ printf(“\t\tFile opens Error!\n\t\t\tPress Anykey back…”);
getch();
return;
}
else
{ do{ puts(“\n\t\tPress\”#\” or search”);
do{ printf(“\t\tPlease input the SN what you want:”);
scanf(“%10s”,stu.NO);
}while(!JY_NO2(stu.NO));
if(strcmp(stu.NO,”#”)==0)break; /*若輸入「#」則結束循環*/
flag=0;
rewind(fp);
while(fread(stud,sizeof(struct stuType),1,fp)) /*檢查文件指針結束*/
{ if(strcmp(stu.NO,stud.NO)==0) /*比較學號*/
{ puts(“\t\tThe Record of this student:”);
printf(“\t\tSN:%s\n”,stud.NO);
printf(“\t\tName:%s\n”,stud.XM);
printf(“\t\tAGE:%.1f\n”,stud.AGE[0]);
printf(“\t\tChinese:%.1f\n”,stud.CJ[0]);
printf(“\t\tMath:%.1f\n”,stud.CJ[1]);
printf(“\t\tEnglish:%.1f\n”,stud.CJ[2]);
printf(“\t\tTotal:%.1f\n”,stud.CJ[3]);
flag=1; /*記錄學號是否查到*/
}
}
if(flag==0)puts(“\t\tUndefined SN”);
}while(strcmp(stu.NO,”#”)!=0);
}
fclose(fp); /*關閉文件*/
}
/*————-9————-*/
void Search_Xingming() /*按姓名查找*/
{ FILE *fp;
int flag=0;
struct stuType stu,stud;
fp=fopen(“stu.dat”,”rb”);
if(fp==NULL)
{ printf(“\t\tFile opens Error!\n\t\tPress Anykey back…”);
getch();
return;
}
else
{ do{
do{ printf(“\t\tPlease input the Name of the Student what you want:”);
scanf(“%10s”,stu.XM);
}while(!JY_XM(stu.XM));
rewind(fp); /*文件指針指向頭*/
while(fread(stud,sizeof(struct stuType),1,fp))
{ if(strcmp(stu.XM,stud.XM)==0) /*比較姓名是否相同*/
{ puts(“\t\tThe name of the Student is:”);
printf(“\t\tSN:%s\n”,stud.NO);
printf(“\t\tName:%s\n”,stud.XM);
printf(“\t\tAGE:%.1f\n”,stud.AGE[0]);
printf(“\t\tChinese:%.1f\n”,stud.CJ[0]);
printf(“\t\tMath:%.1f\n”,stud.CJ[1]);
printf(“\t\tEnglish:%.1f\n”,stud.CJ[2]);
printf(“\t\tTotal:%.1f\n”,stud.CJ[3]);
flag=1; /*記錄姓名是否被查到*/
}
}
if(flag==0)puts(“\n\t\tUndefined Name!”);
puts(“\t\tContinue?(y–yes,Else key back)?”);
}while(getch()==’y’);
}
fclose(fp);
/* puts(“\t\tPress Anykey to continue…”);*/
/* getch();*/
}
/*————-10————-*/
int ListFile(void) /*輸出文件,列出所有學生成績*/
{ FILE *fp;
int REC=0; /*記錄學生人數*/
struct stuType stu;
fp=fopen(“stu.dat”,”rb”);
if(fp==NULL)
{ printf(“\t\tFile opens Error!\n\t\tPress Anykey back…”);
getch();
return 1;
}
else{ printf(“\t\tRecords of the Students:\n”);
printf(“\t\tSN\t\tName\tChinese\tMath\tEnglish\tTotal\n”);
rewind(fp);
while(fread(stu,sizeof(struct stuType),1,fp))
{ /*每讀取一個長度的數據就輸出*/
printf(“\t\t%s”,stu.NO);
printf(“\t%s”,stu.XM);
printf(“\t%.1f”,stu.AGE);
printf(“\t%.1f”,stu.CJ[0]);
printf(“\t%.1f”,stu.CJ[1]);
printf(“\t%.1f”,stu.CJ[2]);
printf(“\t%.1f”,stu.CJ[3]);
printf(“\n”);
REC++;
if(REC%20==0) /*20個學生成績,停一下*/
{ printf(“\t\tPress Anykey to continue…\n”);
getch();
}
}
}
fclose(fp); /*關閉文件*/
printf(“\t\tContinue…”);
getch();
}
/*————-11————-*/
void Statistics() /*統計及格和優秀人數*/
{ FILE *fp;
int REC=0,unpass[4]={0},good[4]={0}; /*REC–記錄個數,即人數,unpass–重修人數,good–優秀人數*/
float highest[4]={0},score[4]={0}; /*highest–最高分,score–總分*/
struct stuType stu;
fp=fopen(“stu.dat”,”rb”);
if(fp==NULL)
{ printf(“\t\tFile opens Error!\n\t\tPress Anykey back…”);
getch();
return;
}
else { rewind(fp);
while(fread(stu,sizeof(struct stuType),1,fp))
{ REC++;
score[0]=score[0]+stu.CJ[0]; /*語文*/
if(stu.CJ[0]=60)unpass[0]++;
if(stu.CJ[0]=80)good[0]++;
if(highest[0]stu.CJ[0])highest[0]=stu.CJ[0];
score[1]=score[1]+stu.CJ[1]; /*數學*/
if(stu.CJ[1]=60)unpass[1]++;
if(stu.CJ[1]=80)good[1]++;
if(highest[1]stu.CJ[1])highest[1]=stu.CJ[1];
score[2]=score[2]+stu.CJ[2]; /*英語*/
if(stu.CJ[2]=60)unpass[2]++;
if(stu.CJ[2]=80)good[2]++;
if(highest[2]stu.CJ[2])highest[2]=stu.CJ[2];
score[3]=score[3]+stu.CJ[3]; /*總評*/
if(stu.CJ[3]=60)unpass[3]++;
if(stu.CJ[3]=80)good[3]++;
if(highest[3]stu.CJ[3])highest[3]=stu.CJ[3];
}
if(REC==0) /*可以防止記錄為0是REC作除數而造成的錯誤*/
{ printf(“\t\tYou did’t input the Name!Press Anykey back…”);
getch();
return;
}
else{
printf(“\t Chinese\t Math\t English\tTotal\n”); /*輸出統計信息*/
printf(“\tAverage: %.1f\t %.1f\t %.1f\t\t%.1f\n”,score[0]/REC,score[1]/REC,score[2]/REC,score[3]/REC);
printf(“\tTop record: %.1f\t %.1f\t %.1f\t\t%.1f\n”,highest[0],highest[1],highest[2],highest[3]);
printf(“\tNumber of good students: %d\t\t %d\t %d\t\t %d\n”,good[0],good[1],good[2],good[3]);
printf(“\tNumber of unpassed students:%d\t\t %d\t %d\t\t %d\n”,unpass[0],unpass[1],unpass[2],unpass[3]);
}
}
fclose(fp);
printf(“\n\t\t\tPress Anykey to continue…”);
getch();
}
/*————-12————-*/
void HelpMessage()
{ clrscr();
printf(“\n\n\n\n\n chi xi tong shi lao shi suo bu zhi zuoye bianzhi ercheng,gai xitong juyou cunchu xuesheng shuju,an xuehao,xingming chaxun,liechu xuesheng chengji he tongjigongneng.\n \n shiyongfangfa:xitong shulu shuju hou,jiangzai dangqian muluzhong jianli yige mingwei stu.dat wenjian,yongyubaocun shulu de shuju.xuehao shulu zhineng yong shuzi shulu qie xuehao zhineng shi10wei.xingming shulu fuhe zhongguoren de xingming,zhineng yong zhongwen pinying,qie zuichangwei5 ge hanzhi.\n chi chenxu zai Turbo C2.0xia yunxing tongguo \n\n “);
getch();
}
/*————-13————-*/
int GetKey(void) /*此函數返回一個按鍵的數值*/
{ int key;
key=bioskey(0); /*bioskey為調用BIOS鍵盤介面*/
if(key8) /*位移*/
{
key=key0x00ff;
}
return key; /*返回按鍵*/
}
/*————-14————-*/
void main()
{ int key;
struct date d; /*定義時間結構體*/
getdate(d); /*讀取系統日期並把它放到結構體d中*/
clrscr(); /*清除屏幕*/
printf(“\n\n\n\n\n”);
printf(“\t ========================================================\n”); /*版本信息*/
printf(“\n”);
printf(“\t\t The System of Students Records Management 1.0 \n”);
printf(“\n”);
printf(“\n”);
printf(“\t\t Builder: XG042-WZM YS HYF WQ \n”);
printf(“\t\t Teacher:Song Zheyuan\n”);
printf(“\t\t Time:2005\\7\\5 \n”);
printf(“\n”);
printf(“\t ========================================================\n”);
printf(“\t\t\tPress Anykey to continue…”);
/*while(!kbhit());*/
getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/
system(“cls”); /*調用DOS的清屏函數,TC中可用clrscr代替*/
while(1) /*主菜單*/
{
printf(“\n\n\n\n\n”);
printf(“\t **************************************************\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF1 –Help **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF2 –Data Input Save **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF3 –Search by SN **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF4 –Search by Name **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF5 –Contents Input **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tF6 –Count Students Number(PassedGood) **\n”);
printf(“\t **\t **\n”);
printf(“\t **\tESC–Quit the System **\n”);
printf(“\t **\t **\n”);
printf(“\t **************************************************\n”);
printf(“\n\t Please select…\t\t%d\\%d\\%d\n\n”,d.da_year,d.da_mon,d.da_day); /*提示信息,並顯示當前系統日期*/
key=GetKey(); /*調用自定義函數,讀取一個鍵*/
switch(key)
{
case F1: HelpMessage(); break;
case F2: CreatFile(); break;
case F3: Search_Xuehao(); break;
case F4: Search_Xingming();break;
case F5: ListFile(); break;
case F6: Statistics(); break;
case ESC:exit(1); break;
/*default: puts(“\t\t\tWrong SN input!”);
printf(“\t\t\tPress Anykey back…”);
getch();*/
}
clrscr(); /*每執行完一項功能後,自動清屏*/
}
}
C語言課程設計學生成績管理系統
這是昨晚一個人找我做的,他給了我一百塊錢買我的代碼,現在我不要你的錢了,你採納我我就發代碼給你
原創文章,作者:DXUF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/131975.html