C語言實驗報告.docx
《C語言實驗報告.docx》由會員分享,可在線閱讀,更多相關(guān)《C語言實驗報告.docx(26頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 《C語言程序設(shè)計實訓(xùn)1》報告 設(shè) 計 題 目: 基于數(shù)組的學(xué)生信息管理系統(tǒng) 學(xué) 院 名 稱: 信息科學(xué)技術(shù)學(xué)院 專 業(yè): 計算機科學(xué)與技術(shù) 班 級:
2、 姓 名: 學(xué) 號 指 導(dǎo) 教 師: 提 交 日 期: 2014年12月22日 一、實驗內(nèi)容 編寫并調(diào)試程序,實現(xiàn)學(xué)校各專業(yè)班級學(xué)生信息的管理。10個學(xué)生的信息存儲在文件studentInit.dat中。在頭文件student.h中定義學(xué)生信息的結(jié)構(gòu)體類型,包括:學(xué)號、姓名、專業(yè)、班級、3門成績;和符號常量N(學(xué)生數(shù))。(同一班級的學(xué)生可以屬于不同的專業(yè),同一專業(yè)的學(xué)生可以屬于不同的班級) #define N 10 struct Student{ c
3、har num[15];//學(xué)號 char name[15];//姓名 char major[10];//專業(yè)(computer,software,network) int classNo;//班級(1-2) int score[3];//3門課的成績(0-2) }; typedef struct Student STU; 二、實驗要求 (1) main函數(shù):以菜單形式將各項功能提供給用戶,根據(jù)用戶的選擇,調(diào)用相應(yīng)的函數(shù)。 STU student[N]; //保存輸入的N名學(xué)生信息 (2) 定義函數(shù)voi
4、d Input(STU *p, int n):從文件sutdentInit中輸入n個學(xué)生的信息。 (3) 定義函數(shù)void Output(STU *p):將p所指的某個學(xué)生信息表格化屏幕輸出。 (4) 定義函數(shù)STU Fetch(int studentIndex):從文件中隨機讀取第studentIndex個(0<= studentIndex <=N-1)學(xué)生的信息。 (5) 定義函數(shù)void Search(STU *p, int classNo, char s, int scoreSum);:實現(xiàn)班級和成績的綜合查找(如1班,總分>240的同學(xué))。 (6) 定義函數(shù)i
5、nt Max(STU *p, int scoreIndex):求所有學(xué)生、下標(biāo)為scoreIndex的課程分數(shù)最高的學(xué)生序號(在數(shù)組中的下標(biāo)),學(xué)生序號作為返回值。 (7) 定義函數(shù)void Sort_select(STU *p): 對所有學(xué)生,按平均成績由低到高進行簡單選擇排序。 (8) 定義函數(shù)void Sort_buble(STU *p, int n); 對某個班級的學(xué)生,按平均成績由高到低進行起泡排序。并調(diào)用Output輸出。 定義局部變量: STU stu_class_ave[N]; //按平均成績排序后的某個班級的學(xué)生信息; int count; //實際元素個
6、數(shù)
(9) 定義函數(shù)void Sort_insert(STU *p, int n, char *major):對某個專業(yè)的學(xué)生,按某門課程成績由低到高進行直接插入排序。并調(diào)用Output輸出。
定義局部變量:
STU stu_class_ subject [N]; //按某門課程成績排序后的某個專業(yè)的學(xué)生信息;
int count; //實際元素個數(shù)
(10) 定義函數(shù)void Save(STU *p,int n) :將學(xué)生信息存入文件。
四、程序清單(關(guān)鍵語句和變量加注釋)
1.頭文件,類型定義,函數(shù)聲明
#include
7、
#include
8、studentIndex);//從文件中隨機讀取第studentIndex個(0<= studentIndex <=N-1)學(xué)生的信息 void Search(STU * p,int classNo,char s,int scoresum);//實現(xiàn)班級和成績的綜合查找(如1班,總分>240的同學(xué)) int Max(STU * p,int scoreIndex);//求所有學(xué)生、下標(biāo)為scoreIndex的課程分數(shù)最高的學(xué)生序號(在數(shù)組中的下標(biāo)),學(xué)生序號作為返回值 void Sort_select(STU * p);//對所有學(xué)生,按平均成績由低到高進行簡單選擇排序 void Sor
9、t_buble(STU * p,int n);//對某個班級的學(xué)生,按平均成績由高到低進行起泡排序 void Sort_insert(STU * p,int n,char * major);//對某個專業(yè)的學(xué)生,按某門課程成績由低到高進行直接插入排序 void Save(STU * p,int n);//將學(xué)生信息存入文件 2.主函數(shù) #include "student.h" void main() { int i,n,id,num,m,sub,corse;//n,第幾個結(jié)構(gòu)體;id,菜單序號;num,班級號;sub,學(xué)生下標(biāo);corse,課程下標(biāo) char maj
10、orname;//專業(yè)名稱 STU students[N]; STU tem; while(1){ printf("\n請輸入功能編號,運行相應(yīng)功能\n"); printf("\n1.您將從文件中讀取10個人的信\n"); printf("\n2.您將從文件中隨機讀取第n(0<=n<=9)個學(xué)生的信 息\n") printf("\n3.您將根據(jù)某一班級某一專業(yè)總分超過多少進行查 找\n"); printf("\n4.您將求某一課程分數(shù)最高的學(xué)生序號的下標(biāo)\n"); printf("\n5.您將對平均成績由低到高進行簡單選擇排序法\n ");
11、 printf("\n6.您將對某一個班的平均成績由低到高進行起泡排 序法\n"); printf("\n7.您將對某門專業(yè)的學(xué)生的某門課程成績由低到高 進行直接插入排序法\n"); printf("\n8.您將把學(xué)生信息存入文件\n"); scanf("%d",&id); getchar(); switch(id){ case 1: { printf("\n從文件中讀取信息\n"); Input(students,sizeof(students)/sizeof(STU));//調(diào)用Input函數(shù),sizeof(studen
12、ts)/sizeof(STU)表示要讀取幾個學(xué)生的信息
printf("\n學(xué)號 姓名 專業(yè) 班級 課程1
課程2 課程3\n");
for(i=0;i 13、個結(jié)構(gòu)體的信息\n",n);
printf("\n學(xué)號 姓名 專業(yè) 班級 課程1
課程2 課程3\n");
Output(&tem);//調(diào)用Output函數(shù)
break;
}
case 3:
{
printf("\n請輸入班級號num(1或2)\n");
printf("\n請輸入專業(yè)名稱majorname(computer=c,
software=s,network=n)\n");
printf("\n請輸入一個分數(shù)m(0 14、,&num);
getchar();
scanf("%c",&majorname);
getchar();
scanf("%d",&m);
Search(students,num,majorname,m);//調(diào)用Search函數(shù)
break;
}
case 4:
{
printf("\n請輸入某一課程下標(biāo)corse(0,1,2)\n");
scanf("%d",&corse);
sub=Max(students,corse);//調(diào)用Max函數(shù),返回值給sub
pri 15、ntf("\n下面是課程%d最高分學(xué)生的信息\n",corse);
printf("\n學(xué)號 姓名 專業(yè) 班級 課程0
課程1 課程2\n");
Output(students+sub);//調(diào)用Output函數(shù)
break;
}
case 5:
{
printf("\n下面是對所有學(xué)生的平均成績簡單選擇排序后的順序:\n");
Sort_select(students);//調(diào)用Sort_select函數(shù)
break;
}
case 6:
{
pr 16、intf("\n請輸入一個班級號num(1或2)\n");
scanf("%d",&num);
printf("\n下面是對某個班級起泡排序后順序:\n");
Sort_buble(students,num);//調(diào)用Sort_buble函數(shù)
break;
}
case 7:
{
printf("\n請輸入某一課程下標(biāo)corse(0,1,2)\n");
printf("\n請輸入專業(yè)名稱majorname(computer=c,
software=s,network=n)\n");
scanf("%d 17、",&corse);
getchar();
scanf("%c",&majorname);
printf("\n下面是對某一專業(yè)學(xué)生的某一課程直接插
入排序后的順序:\n");
Sort_insert(students,corse,&majorname);//調(diào)用Sort_insert函數(shù)
break;
}
case 8:
{
Save(students,sizeof(students)/sizeof(STU));//調(diào)用Save函數(shù),sizeof(students)/sizeof(STU)表示要保存幾個學(xué)生的 18、信息
break;
}
default:
{
break;
}
if((id<1)||(id>8))
break;
}
}
}
3.Input函數(shù)
#include "student.h"
void Input(STU * p,int n)
{
FILE * fp;
char filename[15];
printf("\n請輸入打開文件名:\n");
gets(filename);
fp=fopen(filename,"r");
fread(p,sizeof(STU), 19、n,fp);
fclose(fp);
}
4.Output函數(shù)
#include "student.h"
void Output(STU * p)
{
printf("\n%-5s%-10s%-8s%6d%6d%7d%7d\n",p->num,p->name,p->major,p->classNo,p->score[0],p->score[1],p->score[2]);
}
5.Fetch函數(shù)
#include "student.h"
STU Fetch(int studentIndex)
{
STU tem;
FILE * fp;
20、 char filename[15];
if((studentIndex<0)||(studentIndex>N-1)){
printf("studentIndex error\n");
exit(0);
}
getchar();
printf("\n請輸入打開文件名:\n");
gets(filename);
fp=fopen(filename,"r");
fseek(fp,(long)(studentIndex*sizeof(STU)),SEEK_SET);
fread(&tem,sizeof(STU),1,fp);
fclose(fp); 21、
return tem;
}
6.Search函數(shù)
#include "student.h"
void Search(STU * p,int classNo,char s,int scoreSum)
{
int i;
for(i=0;i 22、級%d專業(yè)%c超過%d分的學(xué)生
信息\n",classNo,s,scoreSum);
printf("\n學(xué)號 姓名 專業(yè) 班級
課程1 課程2 課程3\n");
Output(p+i);
}
}
}
7.Max函數(shù)
#include "student.h"
int Max(STU * p,int scoreIndex)
{
int i=0,max,result;
max=(p+i)->score[scoreIndex];
result=i;
for(i=1;i 23、 if((p+i)->score[scoreIndex]>max){
max=(p+i)->score[scoreIndex];
result=i;
}
}
return result;
}
8. Sort_select函數(shù)
#include "student.h"
void Sort_select(STU * p)
{
int i,j,k;
float sum,ave[N],t;
STU tem;
for(i=0;i 24、core[1]+(p+i)->score[2];
ave[i]=sum/3;
}
for(i=0;i 25、i 26、m=sum+(p+i)->score[0]+(p+i)->score[1]+
(p+i)->score[2];
ave[i]=sum/3;
}
for(i=0;i 27、ss_ave[j+1]=tem;
}
printf("\n學(xué)號 姓名 專業(yè) 班級 課程1 課程2
課程3\n");
for(j=0;j 28、
if(* major==(p+i)->major[0]){
count++;
stu_class_subject[j]=* (p+i);
j++;
}
for(i=2;i<=count;i++){
stu_class_subject[0]=stu_class_subject[i];
for(j=i-1;stu_class_subject[0].score[n] 29、class_subject[j+1]=stu_class_subject[0];
}
printf("\n學(xué)號 姓名 專業(yè) 班級 課程1 課程2
課程3\n");
for(j=1;j<=count;j++)
Output(stu_class_subject+j);
}
11. Save函數(shù)
#include "student.h"
void Save(STU * p,int n)
{
FILE * fp;
char filename[15];
int i;
printf("\n請輸入保存的文件名:\n"); 30、
gets(filename);
if((fp=fopen(filename,"wb"))==NULL){
printf("cannot open file\n");
return;
}
for(i=0;i
- 溫馨提示:
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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 110中國人民警察節(jié)(筑牢忠誠警魂感受別樣警彩)
- 2025正字當(dāng)頭廉字入心爭當(dāng)公安隊伍鐵軍
- XX國企干部警示教育片觀后感筑牢信仰之基堅守廉潔底線
- 2025做擔(dān)當(dāng)時代大任的中國青年P(guān)PT青年思想教育微黨課
- 2025新年工作部署會圍繞六個干字提要求
- XX地區(qū)中小學(xué)期末考試經(jīng)驗總結(jié)(認真復(fù)習(xí)輕松應(yīng)考)
- 支部書記上黨課筑牢清廉信念為高質(zhì)量發(fā)展?fàn)I造風(fēng)清氣正的環(huán)境
- 冬季消防安全知識培訓(xùn)冬季用電防火安全
- 2025加強政治引領(lǐng)(政治引領(lǐng)是現(xiàn)代政黨的重要功能)
- 主播直播培訓(xùn)直播技巧與方法
- 2025六廉六進持續(xù)涵養(yǎng)良好政治生態(tài)
- 員工職業(yè)生涯規(guī)劃方案制定個人職業(yè)生涯規(guī)劃
- 2024年XX地區(qū)黨建引領(lǐng)鄉(xiāng)村振興工作總結(jié)
- XX中小學(xué)期末考試經(jīng)驗總結(jié)(認真復(fù)習(xí)輕松應(yīng)考)
- 幼兒園期末家長會長長的路慢慢地走