當前位置:首頁 » 編程語言 » c語言成績簿

c語言成績簿

發布時間: 2023-09-05 20:08:39

A. 用c語言編一個成績記錄簿

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#defineMAX1000

typedefstructLesson//定義課程結構體
{
intLesson_Num;
charLesson_Name[50];
intLesson_Mark;
intLesson_Credit;
}Lesson;

typedefstructStudent//定義學生的結構體
{
charName[50];
intNum;
intLesson_Count;
LessonL[20];
}Student;

StudentS[MAX];
staticintStudent_Count=0;//記錄學生數的變數

voidPrintInterface();//列印界面
intAddStudent();//添加,帶返回值,提示操作成功
intDelStudent();//刪除,帶返回值,提示操作成功
voidCheckStudent();//查學生成績
voidCheckClass();//查班成績表
voidWriteFile();//寫入文本文件
voidReadFile();//讀取文本文件

voidmain()
{
intChoice;
while(1)
{
PrintInterface();
scanf("%d%*c",&Choice);//"%*c"是吸收回車的,因為後面會輸入字母類型
if(Choice>=0&&Choice<=6)//選擇操作合法
{
switch(Choice)
{
case0:exit(1);
case1:
{
system("cls");
if(AddStudent())printf(" 添加成功...回車繼續 ");
elseprintf(" 添加失敗...回車繼續 ");
getchar();
getchar();
system("cls");
break;
}
case2:
{
system("cls");
if(DelStudent())printf(" 刪除成功...回車繼續 ");
elseprintf(" 刪除失敗...回車繼續 ");
getchar();
getchar();
system("cls");
break;
}
case3:
{
system("cls");
CheckStudent();
system("cls");
break;
}
case4:
{
system("cls");
CheckClass();
system("cls");
break;
}
case5:WriteFile();system("cls");break;
case6:ReadFile();system("cls");break;
default:;
}
}
else
{
printf("無此功能..重新選擇..回車確定 ");//選擇操作非法
getchar();
system("cls");//清屏函數
}
}
}

voidPrintInterface()
{
printf(" -------------------------- ");
printf(" |1、添加| ");
printf(" || ");
printf(" |2、刪除| ");
printf(" || ");
printf(" |3、查學生成績| ");
printf(" || ");
printf(" |4、查班成績表| ");
printf(" || ");
printf(" |5、寫入文本文件| ");
printf(" || ");
printf(" |6、讀取文本文件| ");
printf(" || ");
printf(" |0、退出| ");
printf(" -------------------------- ");
printf(" 選擇操作:");
}

intAddStudent()
{
intS_count,i,j;
printf(" 添加中...... ");
printf(" 添加學生人數(如1、2……999):");
scanf("%d",&S_count);
if(Student_Count+S_count>=MAX)return0;//超過了數組上限
for(i=Student_Count;i<Student_Count+S_count;i++)
{
printf(" 第%d個學生: ",i-Student_Count+1);
printf(" 學生學號:");scanf("%d%*c",&S[i].Num);
printf(" 學生姓名:");gets(S[i].Name);
printf(" 該學生所修課程數:");scanf("%d",&S[i].Lesson_Count);
for(j=0;j<S[i].Lesson_Count;j++)
{
printf(" 第%d門課: ",j+1);
printf(" 課程編號:");scanf("%d%*c",&S[i].L[j].Lesson_Num);
printf(" 課程名稱:");gets(S[i].L[j].Lesson_Name);
printf(" 課程成績:");scanf("%d",&S[i].L[j].Lesson_Mark);
printf(" 課程學分:");scanf("%d",&S[i].L[j].Lesson_Credit);
if(S[i].L[j].Lesson_Mark<60)S[i].L[j].Lesson_Credit=0;//不及格的課程學分為0
}
}
Student_Count+=S_count;
return1;
}

intDelStudent()
{
char*D_Name;
intD_Num;
inti,j;
printf(" 填寫待刪除學生的信息: ");
printf(" 學生姓名:");gets(D_Name);
printf(" 學生學號:");scanf("%d",&D_Num);
for(i=0;i<Student_Count;i++)
{
if(!strcmp(S[i].Name,D_Name)&&S[i].Num==D_Num)
{
printf(" 找到該學生,刪除中...... ");
for(j=i+1;j<Student_Count;j++)
{
S[j-1]=S[j];
}
break;
}
}
if(i==Student_Count)
{
printf(" 未找到該學生...請核對所填信息 ");
return0;
}
else
{
Student_Count--;
return1;
}
}

voidCheckStudent()
{
intC_Choice;
charC_Name[50];
intC_Num;
inti,j;
printf(" 輸入所查學生信息(1.姓名\2.學號)選擇:");
scanf("%d%*c",&C_Choice);
printf(" 查找中...... ");
if(C_Choice==1||C_Choice==2)//選擇合法
{
if(C_Choice==1)
{
printf(" 姓名:");gets(C_Name);
for(i=0;i<Student_Count;i++)//全部窮舉,防止同名同姓
{
if(!strcmp(S[i].Name,C_Name))
{
printf(" 學號:%d 姓名:%s ",S[i].Num,S[i].Name);
printf(" 課程編號 課程名稱 課程成績 課程學分 ");
printf("----------------------------------------------------- ");
for(j=0;j<S[i].Lesson_Count;j++)
{
printf("%d %s %d %d ",S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
printf("----------------------------------------------------- ");
}
printf(" ");
}
}
}
else
{
printf(" 學號:");scanf("%d%*c",&C_Num);
for(i=0;i<Student_Count;i++)//不用全部窮舉,學號唯一
{
if(S[i].Num==C_Num)
{
printf(" 學號:%d 姓名:%s ",S[i].Num,S[i].Name);
printf(" 課程編號 課程名稱 課程成績 課程學分 ");
printf("----------------------------------------------------- ");
for(j=0;j<S[i].Lesson_Count;j++)
{
printf("%d %s %d %d ",S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
printf("----------------------------------------------------- ");
}
printf(" ");
break;
}
}
}
printf("查找完畢...回車繼續 ");
getchar();
}
else//選擇不合法
{
printf("選擇錯誤...回車繼續 ");
getchar();
return;
}
}

voidCheckClass()
{
intC_LNum;
doubleSSNum=0,PassSNum=0,SMark=0;
inti,j;
printf(" 請輸入課程編號:");
scanf("%d%*c",&C_LNum);
printf(" 查找中...... ");
printf("學號 姓名 課程名稱 課程成績 課程學分 ");
printf("---------------------------------------------------- ");
for(i=0;i<Student_Count;i++)
{
for(j=0;j<S[i].Lesson_Count;j++)
{
if(S[i].L[j].Lesson_Num==C_LNum)
{
printf("%d %s %s %d %d ",S[i].Num,S[i].Name,S[i].L[j].Lesson_Name,
S[i].L[j].Lesson_Mark,S[i].L[j].Lesson_Credit);
printf("---------------------------------------------------- ");
SMark+=S[i].L[j].Lesson_Mark;
SSNum++;
if(S[i].L[j].Lesson_Mark>=60)PassSNum++;
break;
}
}
}
printf(" 平均分:%.2lf 及格率:%.2lf%% ",SMark/SSNum,PassSNum/SSNum*100);
printf(" 查找完畢...回車繼續 ");
getchar();
}

voidWriteFile()
{
FILE*fp;
inti,j;
charAdr[100];
printf(" 請輸入寫入的文件地址: 地址輸入格式:例如d:\\Student.txt(\\為轉義字元):");
scanf("%s%*c",Adr);
printf(" 寫入中...... ");
if(fp=fopen(Adr,"w"))//寫入文件
{
fprintf(fp,"%d ",Student_Count);
for(i=0;i<Student_Count;i++)
{
fprintf(fp,"%d %s %d ",S[i].Num,S[i].Name,S[i].Lesson_Count);
for(j=0;j<S[i].Lesson_Count;j++)
{
fprintf(fp,"%d %s %d %d ",S[i].L[j].Lesson_Num,
S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,
S[i].L[j].Lesson_Credit);
}
}
printf(" 寫入完成...回車繼續 ");
fclose(fp);
}
else
{
printf(" 寫入失敗...回車繼續 ");
}
getchar();
}
voidReadFile()
{
FILE*fp;
inti,j;
charAdr[100];
printf(" 請輸入讀取(為防止讀入錯誤,希望與寫入文件內容格式一致)的文件地址: 地址輸入格式:例如d:\\Student.txt(\\為轉義字元):");
scanf("%s%*c",Adr);
printf(" 讀取中...... ");
if(fp=fopen(Adr,"r"))
{
fscanf(fp,"%d",&Student_Count);
for(i=0;i<Student_Count;i++)
{
fscanf(fp,"%d%s%d",&S[i].Num,&S[i].Name,&S[i].Lesson_Count);
for(j=0;j<S[i].Lesson_Count;j++)
{
fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num,
&S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark,
&S[i].L[j].Lesson_Credit);
}
}
printf(" 讀取成功...回車繼續 ");
fclose(fp);
}
else
{
printf(" 讀取失敗...回車繼續 ");
}
getchar();
}

B. 學生成績記錄薄 c語言 課程設計報告

C語言程序設計報告

課題名稱:學生成績管理

1 系統概述:

本程序為一個學生成績管理系統,對學生的成績進行管理,學生的信息包括學號,姓名,學期,三門課程的成績,輸入這些信息,本程序可以自動計算總成績,可以按高分到低分進行排名,並對輸入信息的人數進行匯總.

2 數據結構設計:

(1)結構體;

(2)數組的設計:運用指針代替數組,使用指針來建立線性表,使程序更加簡潔,可讀性更強.

3 各函數的設計:

函數原型:void InitList(SqLinkList &L);

功能: 創建一個空的線性鏈表;

入口參數:L為要創建的線性鏈表;

出口參數:創建鏈表的L.head為空,L.length為0;

返回值: 無;

函數原型:void EmptyLinkList(SqLinkList &L);

功能: 清空整個線性鏈表;

入口參數:L為要清空的鏈表名稱;

出口參數:若清空成功則鏈表長度L.length為0;

返回值: 無;

函數原型:int ScanE(ElemType &e);

功能: 輸入學生信息;

入口參數:e為要輸入信息的學生名稱;

出口參數:e.num保存學號,e.name保存姓名,e.team保存所在學期,e.s1,e.s2,e.s3分別保存三門課程的成績;

返回值: 輸入合法返回1,否則返回0;

錯誤處理:若學號、姓名等輸入不合法會有提示及重輸;

函數原型:Status SqLinkListAppend(SqLinkList &L,ElemType e);

功能: 追加一個結點到線性鏈表中;

入口參數:e為所追加的結點名稱,L為e所追加到的線性鏈表的名稱;

出口參數:若追加成功,則e為頭結點,鏈表長度L.length增1;

返回值: 若追加成功返回1;

函數原型:Link SearchNode(SqLinkList L,int NUM);

功能: 查找學號為NUM的學生;

入口參數:查找的鏈表名稱L,學號NUM;

出口參數:若找到結點指針p指向該結點,否則指向空結點;

返回值: 結點指針p;

函數原型:void SearchTeam(SqLinkList L,int team);

功能: 查找學期為team的所有記錄並輸出其信息;

入口參數:查找的鏈表名稱L,要查找的學期team;

出口參數:無;

返回值: 無;

函數原型:void SearchUnpass(SqLinkList L,float s1,float s2,float s3);

功能: 查找所有有掛科記錄的學生並輸出其信息;

入口參數:查找的鏈表名稱L,要查找的各門學科成績s1,s2,s3;

出口參數:無;

返回值: 無;

函數原型:void SqLinkListSearch(SqLinkList L);

功能: 對鏈表進行分類查找;

入口參數:要查找的鏈表名稱L;

出口參數:無;

返回值: 無;

函數原型: void inputData(SqLinkList &L);

功能: 輸入數據,並追加一個結點;

入口參數: L為要追加結點的鏈表名稱;

出口參數: 無;

返回值: 無;

函數原型:void SqLinkListTraverse(SqLinkList L);

功能: 輸出鏈表中所有學生成績列表;

入口參數:L為要輸出信息的鏈表名稱;

出口參數:無;

返回值: 無;

函數原型:void PrintE(ElemType e);

功能: 輸出一個結點的所有信息;

入口參數:要輸出的結點名稱e;

出口參數:無;

返回值: 無;

4 使用程序的說明:

本程序為一個學生成績管理系統。對學生的成績信息進行管理,學生的信息包括學號、姓名、學期、三門課程的成績、平均成績、名次。本管理系統實現學生的學號、姓名、學期、每門課程的成績的錄入,並自動按平均分排名,使用時按屏幕上的提示,輸入使用代碼.如下圖所示:

例如:輸入代碼數字」1」,程序執行」輸入學生成績或已存在的學生成績進行修改」這條小程序.輸入學生個人信息後,如下圖所示:

如此分別輸入相應的程序代碼,就執行相應的程序段.

如下的程序是按學號進行成績排名:

當輸入」6」時,執行相應的程序,即匯總一共輸入學生的人數:

5 總結和體會:

通過對C語言學習,尤其是這學期本班開展C語言雙語教學,體會到學習難的同時,也真正了解到C語言作為一門高級的計算機語言的強大功能,特別是在當今實際生活,生產,辦公,信息管理等方面的強大作用. 這次合作我們遇到了許多的困難。時間的緊迫,知識的不足,給我很大的壓力。最終我還是還是完成了任務。團結就是力量是我這次最真切的感受。

6 程序代碼:

void InitList(SqLinkList &L) {

// 構造一個空的線性表L;

L.head = 0; //頭指針為空;

L.length = 0; //長度初始為0;

}

void EmptyLinkList(SqLinkList &L){

//入口參數為整個線性表的數據,功能為清空線性表;

Node *p;

if(!L.head)printf("系統中不存在記錄。\n");

//頭指針為空時沒有學生錄入;

else {

while (L.head){

//每個循環將下一結點賦值給頭指針,並釋放本結點空間,直至線性表清空;

p=L.head;

L.head=p->next;

free(p);

} //end while;

L.length=0; //長度為0;

printf("該管理系統學生信息已清空。\n");

}//end else;

}

int ScanE(ElemType &e){

//輸入一個學生的成績數據結點。返回0為無效結點數據,1為有效結點數據;

printf("\n學號:");

scanf("%d",&e.num);

if(e.num==0){

//學號為0輸入不合法,重新輸入;

printf("學號輸入不合法.\n");

return 0;

}

printf("\n姓名:");

scanf("%s",&e.name);

printf("\n學期:");

scanf("%d",&e.team);

while(e.team>12){

//系統只記錄小於12的學期數;

printf("輸入的學期不能大於12,請重新輸入:");

scanf("%d",&e.team);

}

printf("\n成績A:");

scanf("%f",&e.s1);

printf("\n成績B:");

scanf("%f",&e.s2);

printf("\n成績C:");

scanf("%f",&e.s3);

return OK;

}

Status SqLinkListAppend(SqLinkList &L,ElemType e){

//追加一個結點到線性表中;

Node *p;

p=SearchNode(L,e.num);

//查找學號為e.num的記錄並將其地址賦給指針p;

if (p==0){

//若不存在添加學號相同的結點,追加一個結點;

p=(Node *)malloc(sizeof(Node));

if (!p) return ERROR;

memcpy(&(p->data),&e,sizeof(ElemType));

p->next=L.head ;

L.head=p;

//追加的一個結點為首結點;

L.length++; //表長度加1;

}

else { //如果該學號記錄已存在,則進行修改操作;

memcpy(&(p->data),&e,sizeof(ElemType));

printf("該學生記錄已經存在,已完成修改操作。\n");

}

return OK;

}

Link SearchNode(SqLinkList L,int NUM){

//查找學生記錄,該學生的學號為NUM;

Node *p;

p=L.head; //p先指在頭結點;

while (p&& p->data.num !=NUM ) p=p->next;

//如果該學生的學號不為NUM則查找下一個結點;

return p;

}

void SearchTeam(SqLinkList L,int team){

//按學期查找並輸出所有該學期存在的記錄;

Node *p;

p=L.head;

int n,sum=0;

//sum記錄該學期的學生總人數;

printf("請輸入您要查詢的學生的學期:");

scanf("%d",&n);

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

while(p&&p->next){

//如果p結點和它的下一結點不為空,且該結點的學期等於要查找學期,則格式輸出所有該學期學生信息;

if(p->data.team==n){

PrintE(p->data);

sum++;

//查找到一個該學期的學生記錄計數加1;

}

p=p->next;

//轉向下一結點;

} //end while;

if(p->data.team==n){

//如果p的下一結點為空,且本結點學期為n,則格式輸出該結點信息;

sum++;

PrintE(p->data);

}

if(sum==0)printf("沒有這學期的記錄。\n");

if(sum)printf("該學期共有%d人的記錄.\n",sum);

}

void SearchUnpass(SqLinkList L,float s1,float s2,float s3){

//查找並輸出有掛科的學生信息;

Node *p;

p=L.head;

int sum=0;

//sum計數掛科總人數,初始為0;

printf("以下是有一門以上不及格科目的學生的成績:\n");

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

while(p&&p->next){

//如果p及其下一結點為真,且該結點有一門以上科目分數低於60則輸出該結點成績並使sum計數加1;

if((p->data.s1<60)||(p->data.s2<60)||(p->data.s3<60))

{

PrintE(p->data);

sum++;

} //end if;

p=p->next;

//轉到下一結點;

} //end while;

if((p->data.s1<60)||(p->data.s2<60)||(p->data.s3<60)){

//查看最後一個結點,若有掛科,sum加1並格式輸出結點信息;

sum++;

PrintE(p->data);

}

if(sum==0)printf("沒有不及格的記錄。\n");

if(sum)printf("共有%d人的掛科記錄.\n",sum);

}

void SqLinkListSearch(SqLinkList L){

//分類查找學生記錄;

Node *p;

p=L.head;

int n,reg; //reg為查詢方式的指令;

printf("1--按學號查詢\n2--按學期查詢\n3--掛科學生信息列表\n");

printf("請您輸入查詢方式:");

scanf("%d",®);

if(L.length){

if(reg>3)printf("對不起沒有您要求的選項。\n");

//若reg>3則輸入不合法;

else if(reg==1){

//reg==1按學號查詢;

printf("請輸入您要查詢的學生的學號:");

scanf("%d",&n);

while(p&&p->next&& p->data.num !=n) p=p->next;

//當p和他下一結點為真時且結點數據不為要查找數據時轉向下一結點;

if(p->data.num==n){

//找到所要查詢結點,格式輸出;

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

PrintE(p->data);

}

else printf("沒有您要查找的學號。\n");

} //end reg==1 if ;

else if(reg==2)SearchTeam(L,p->data.team);

//reg==2,調用SearchTeam函數按學期查詢並輸出;

else if(reg==3)SearchUnpass(L,p->data.s1,p->data.s2,p->data.s3);

//reg==3,調用SearchUnpass函數,輸出全部有掛科記錄的學生信息;

}//end if;

else printf("系統中無記錄.\n");

}

void inputData(SqLinkList &L){

//請求輸入學生成績,則追加一個結點並輸入;

ElemType e;

if (ScanE(e)) SqLinkListAppend(L,e); //輸入數據,追加一個結點;

}

void SqLinkListTraverse(SqLinkList L){

//所有學生信息列表輸出;

Node *p;

char c;

p=L.head;

if(p) //非空表;

{

printf("\n學號 姓名 學期 成績A 成績B 成績C 平均成績\n");

for (p=L.head ;p;p=p->next )PrintE(p->data);

//從第一個結點開始輸出所有信息直到結點為空;

}

else printf("系統中無記錄。\n");

//空表;

c=getchar();

}

void PrintE(ElemType e){

//輸出各科成績和平均成績;

printf("%d\t%s\t%d\t%f\t%f\t%f\t%f\n",e.num,e.name,e.team,e.s1,e.s2,e.s3,(e.s1+e.s2+e.s3)/3);

//格式輸出學生的學號、姓名、學期、A、B、C三門成績以及平均成績;

}

熱點內容
滑板鞋腳本視頻 發布:2025-02-02 09:48:54 瀏覽:433
群暉怎麼玩安卓模擬器 發布:2025-02-02 09:45:23 瀏覽:557
三星安卓12彩蛋怎麼玩 發布:2025-02-02 09:44:39 瀏覽:744
電腦顯示連接伺服器錯誤 發布:2025-02-02 09:24:10 瀏覽:537
瑞芯微開發板編譯 發布:2025-02-02 09:22:54 瀏覽:147
linux虛擬機用gcc編譯時顯示錯誤 發布:2025-02-02 09:14:01 瀏覽:240
java駝峰 發布:2025-02-02 09:13:26 瀏覽:652
魔獸腳本怎麼用 發布:2025-02-02 09:10:28 瀏覽:538
linuxadobe 發布:2025-02-02 09:09:43 瀏覽:212
sql2000資料庫連接 發布:2025-02-02 09:09:43 瀏覽:726