當前位置:首頁 » 考試成績 » 學生成績管理

學生成績管理

發布時間: 2020-11-30 12:26:05

A. 學生成績管理

有一個程序差不多的,但是要你自己去改一下
這個給你參考一下吧
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<string.h>

typedef struct STUDENT
{
char studentNumber[10];/*學生學號*/
char studentName[20];/*學生姓名*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*鏈表表頭指針*/
/*以下是函數聲明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用於接受用戶的選擇*/
/*主函數*/
main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函數功能:從文件中讀學生信息到鏈表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/************************************
函數功能:顯示菜單,根據用戶的輸入
完成相應的功能
************************************/
void DesplayMenu(void)
{
STUDENT *p;
printf("-------請選擇相應功能------------\n\n");
printf("| 1 顯示所有學生的信息 |\n");
printf("| 2 按姓名查詢 |\n");
printf("| 3 按學號查詢 |\n");
printf("| 4 增加學生 |\n");
printf("| 5 刪除學生 |\n");
printf("| 6 按姓名修改學生成績 |\n");
printf("| 7 按學號修改學生成績 |\n");
printf("| 8 保存所有學生信息 |\n");
printf("| 9 顯示優秀和不及格學生成績 |\n");
printf("| 10 排序結果並輸出績 |\n");
printf("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:
OutputInformation();/*顯示所有學生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4:
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6:
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7:
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8:
SaveLinkToFile();/*保存數據*/
break;
case 9:
DesplayMarkSegment();/*顯示各分數段的學生成績*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*遞歸調用*/
}
/************************************
函數功能:建立鏈表表頭
************************************/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/************************************
函數功能:申請一個新結點,並將其初始化
************************************/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/************************************
函數功能:取得用戶輸入的學生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("請輸入學生學號:\n");
scanf("%s",t->studentNumber);
printf("請輸入學生姓名:\n");
scanf("%s",t->studentName);
printf("請輸入該生所在班級:\n");
scanf("%s",t->className);
printf("請輸入第1門成績:\n");
scanf("%f",&(t->mark1));
printf("請輸入第2門成績:\n");
scanf("%f",&(t->mark2));
printf("請輸入第3門成績:\n");
scanf("%f",&(t->mark3));
}
/************************************
函數功能:在鏈表的結尾處增加一個結點
************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/************************************
函數功能:根據用戶輸入的學生姓名顯示該學生的信息
************************************/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("請輸入學生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據用戶輸入的學號顯示該學生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("請輸入學生學號:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:輸出一個結點的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/************************************
函數功能:根據用戶輸入的學號刪除該學生
************************************/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在該學號的學生\n");
return;
}
printf("成功刪除\n");
}
/************************************
函數功能:顯示所有學生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/************************************
函數功能:根據輸入的姓名修改成績
************************************/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據輸入的學號修改成績
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生學號:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:保存鏈表數據到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/************************************
函數功能:顯示優秀和不及格學生成績
************************************/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的學生成績如下:\n");
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就認為該生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("不及格的學生一共有%d人\n",count);
p=headLink->next;
printf("成績優秀的學生成績如下:\n");
printf("學號\t姓名\t班級\t成績1\t成績1\t成績3\t總成績\t平均成績\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("成績優秀的學生一共有%d人\n",count);
}
/************************************
函數功能:按總成績排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("現在還沒學生信息,請先輸入學生信息\n");
return;
}
while(r)/*兩層while循環實現排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結點信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;

strcpy(q->studentNumber,p->studentNumber);/*再復制p結點信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最後復制exchange結點信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}

B. 學生成績管理程序設計怎麼寫

具體點,用什麼語言
這有個C++的例子
#include<iostream>
#include<string>
#include<fstream>
#include<cstdlib>
#include<iomanip>
using namespace std;
class student
{ private:
char name[20]; //姓名
double cpro,english,math,sport,law,hbpro,computer;//課程
int order, number; //名次,學號
public:
student(){}
student(char n[20],int nu,double cc,double eng,double ma,double sp,double l,double hb,double com)
{strcpy(name,n);
number=nu;
cpro=cc; english=eng;math=ma;sport=sp;law=l;hbpro=hb;computer=com;
}
friend void main();
};

void main()
{
cout<<" 歡迎進入**學生成績管理系統**!"<<endl;

cout<<" ******************************************"<<endl;
cout<<" **** 學生成績管理系統 ****"<<endl;
cout<<" ******************************************"<<endl;
cout<<" **************************"<<endl;
cout<<" **0、輸入數據 **"<<endl;
cout<<" **1、增加數據 **"<<endl;
cout<<" **2、修改數據 **"<<endl;
cout<<" **3、按姓名查詢 **"<<endl;
cout<<" **4、按學號查詢 **"<<endl;
cout<<" **5、輸出所有學生的成績 **"<<endl;
cout<<" **6、退出系統 **"<<endl;
cout<<" **************************"<<endl;
cout<<" 選擇0-6數字進行操作"<<endl;

char p;char w;
student *s[50]; //指針對象,最多存50個學生數據
ofstream *file[50]; //負責對文件插入操作
int i=0;
int j=0;
int flag=0;
do //flag判斷輸入是否有效
{
cin>>p;
if((p>='0'&&p<='6'))
flag=1;
else
cout<<" 指令錯誤!請重新輸入:"<<endl;
}while(flag==0);
do{
switch(p) //接收功能選項
{
case '0': //輸入數據
{
char c;
char name[20];int number;double cpro,english,math,sport,law,hbpro,computer;
do{
cout<<" 請輸入姓名:";
cin>>name;
cout<<endl<<" 請輸入學號:";
cin>>number;
cout<<" 請輸入C++成績:";
cin>>cpro;
cout<<endl<<" 請輸入英語成績:";
cin>>english;
cout<<endl<<" 請輸入數學成績:";
cin>>math;
cout<<endl<<" 請輸入體育成績:";
cin>>sport;
cout<<endl<<" 請輸入網路基礎成績:";
cin>>law;
cout<<endl<<" 請輸入C語言成績:";
cin>>hbpro;
cout<<endl<<" 請輸入資料庫成績:";
cin>>computer;
cout<<endl;
file[j]=new ofstream("D:\\document",ios::ate);
*file[j]<<" 姓名 "<<name<<" 學號 "<<number<<" C++成績 "<<cpro
<<" 英語成績 "<<english<<" 數學成績 "<<math<<" 體育成績 "
<<sport<<" 網路基礎成績 "<<law<<" C成績 "<<hbpro<<" 資料庫成績 "<<computer<<endl;
j++;
s[i]=new student(name, number,cpro,english,math,sport,law,hbpro,computer);
i++;
cout<<" 數據輸入成功,想繼續輸入嗎(y/n):";
cin>>c;
cout<<endl;
do
{
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;
}
else
flag=1;
}while(flag==0);
}while(c=='y');
break;
}

case '1': //增加數據
{
char name[20];
int number;double cpro,english,math,sport,law,hbpro,computer;
char c;
do
{
cout<<" 請輸入您要增加的學生的姓名:";
cin>>name;
cout<<endl<<" 請輸入學號:";
cin>>number;
cout<<endl<<" 請輸入C++成績:";
cin>>cpro;
cout<<endl<<" 請輸入英語成績:";
cin>>english;
cout<<endl<<" 請輸入數學成績:";
cin>>math;
cout<<endl<<" 請輸入體育成績:";
cin>>sport;
cout<<endl<<" 請輸入網路基礎成績:";
cin>>law;
cout<<endl<<" 請輸入C語言成績:";
cin>>hbpro;
cout<<endl<<" 請輸入資料庫成績:";
cin>>computer;
cout<<endl;

file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<" 姓名 "<<name<<" 學號 "<<number<<" C++成績 "<<cpro<<" 英語成績 "<<english<<" 數學成績 "<<math<<" 體育成績 "<<sport<<" 網路基礎成績 "<<law<<" C成績 "<<hbpro<<" 資料庫成績 "<<computer<<endl;
j++;
s[i]=new student(name, number, cpro,english,math,sport,law,hbpro,computer);
i++;
cout<<" 數據輸入成功,想繼續數入嗎(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;
}
}while(c=='y');
break;
}

case '2': //修改數據
{
char name[20];int nu;double cc,eng,ma,sp,l,hb,com;flag=0;
char c;
if(i==0)
{
cout<<" 管理系統中沒有輸入數據!"<<endl;break;
}
do
{
cout<<" 請輸入您要修改的學生的姓名:";
cin>>name;
cout<<endl;
for(int h=0;h<i;h++) //h紀錄要修改學生的位置
{
if(strcmp(name,s[h]->name)==0)
{
flag=1;
cout<<" 請輸入新的學號:";
cin>>nu;
cout<<endl<<" 請輸入C++成績:";
cin>>cc;
cout<<endl<<" 請輸入英語成績:";
cin>>eng;
cout<<endl<<" 請輸入數學成績:";
cin>>ma;
cout<<endl<<" 請輸入體育成績:";
cin>>sp;
cout<<endl<<" 請輸入網路基礎成績:";
cin>>l;
cout<<endl<<" 請輸入C語言成績:";
cin>>hb;
cout<<endl<<" 請輸入資料庫成績:";
cin>>com;
cout<<endl;
s[h]->cpro=cc;
s[h]->english=eng;
s[h]->math=ma;
s[h]->sport=sp;
s[h]->law=l;
s[h]->hbpro=hb;
s[h]->computer=com;
s[h]->number=nu;
cout<<" 數據修改成功!"<<endl;
}
}
if(flag==0)
{
cout<<" 您要修改的學生本來就不存在!請檢查重新輸入!"<<endl;
}
cout<<" 想繼續修改嗎(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl<<" ";
cin>>c;
}
}while(c=='y');
break;
}

case '3': //按姓名查詢
{
char n[20];int j=0;char c;
if(i==0)
{
cout<<" 管理系統中沒有輸入數據!"<<endl;break;
}
do{
int flag=0;
cout<<" 請輸入你要查詢的學生姓名:";
cin>>n;
cout<<endl;
for(int j=0;j<i;j++)
{
if(strcmp(n,(*s[j]).name)==0)
{
flag=1;
cout<<" 您要查詢的學生是:"<<(*s[j]).name<<endl;
cout<<(*s[j]).name<<"的成績是: "<<" C++: "<<(*s[j]).cpro<<" 英語: "<<(*s[j]).english<<" 數學:"<<(*s[j]).math<<" 體育:"<<(*s[j]).sport<<" 法律:"<<(*s[j]).law<<" C:"<<(*s[j]).hbpro<<" 資料庫 "<<(*s[j]).computer<<endl;
}
}
if(flag==0)
cout<<" 對不起!您要查詢的學生不存在!"<<endl;
cout<<" 您想繼續查詢嗎?(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '4': //按學號查詢
{
int n,j=0;char c;
if(i==0){

cout<<" 管理系統中沒有輸入數據!"<<endl;break;
}
do{
int flag=0;
cout<<" 請輸入你要查詢的學生的學號:";
cin>>n;
cout<<endl;
for(int j=0;j<i;j++)
{
if(s[j]->number==n)
{
flag=1;
cout<<" 您要查詢的學生是:"<<(*s[j]).name<<endl;
cout<<(*s[j]).name<<"的成績是: "<<" C++:"<<(*s[j]).cpro<<" 英語:"<<(*s[j]).english<<" 數學:"<<(*s[j]).math<<" 體育:"<<(*s[j]).sport<<" 法律:"<<(*s[j]).law<<" C:"<<(*s[j]).hbpro<<" 資料庫 "<<(*s[j]).computer<<endl;
}
}
if(flag==0)
cout<<" 對不起!您要查詢的學生不存在!"<<endl;
cout<<" 您想繼續查詢嗎?(y/n):";
cin>>c;
cout<<endl;
if(c!='y'&&c!='n')
{
cout<<" 指令錯誤!請重新輸入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '5': //輸出
{
cout<<" 本系統所有學生數據如下:"<<endl;
if(i==0)
cout<<" 管理系統中沒有輸入數據!"<<endl;
cout<<" 姓名 學號 c++ 英語 數學 體育 網路基礎 C語言 資料庫 "<<endl;
for(int k=0;k<i;k++)
{
cout<<s[k]->name<<setw(7)<<s[k]->number<<setw(6)
<<(*s[k]).cpro<<setw(6)<<(*s[k]).english<<setw(6)
<<(*s[k]).math<<setw(6)<<(*s[k]).sport<<setw(7)
<<(*s[k]).law <<setw(10)<<(*s[k]).hbpro<<setw(10)<<(*s[k]).computer<<setw(10)<<endl;
}
break;
}
case'6'://退出
{exit(0); cout<<"Bye bye!"<<endl;}
}
cout<<" 您想繼續進行其他操作嗎?(y/n):";
int flag=0;
do
{
cin>>w;
cout<<endl;
if(w!='y'&&w!='n')
cout<<" 指令錯誤!請重新輸入!"<<endl;
else
flag=1;
}while(flag==0);
if(w=='y')
cout<<" 請輸入操作代碼:0 輸入數據"<<endl;
cout<<" 1 增加數據"<<endl;
cout<<" 2 修改數據"<<endl;
cout<<" 3 按姓名查詢"<<endl;
cout<<" 4 按學號查找"<<endl;
cout<<" 5 輸出所有學生成績"<<endl;
cout<<" 6 退出系統"<<endl;
cin>>p;
}while(w=='y');
}

C. 學生成績管理程序

想要它變成什麼樣,自己做一下修改就是了:
#include<iostream>
#include<fstream>
#include <windows.h>
#include<string>
#include <time.h>
#include<cstdlib>
#include<iomanip>
using namespace std;
int n=0;
#define M cout<<
#define N ;Sleep(80);
#define Y N M
#define NN cout<<"╭—————————————————————————————————————————————╮"<<endl;cout<<"∣ num ∣ name∣ age ∣ hig ∣ 語文 ∣ 數學 ∣ 英語 ∣ 平均 ∣ 總分 ∣ 評語 ∣ "<<endl;cout<<"├———-┼———-┼———┼———┼———-┼———-┼———-┼—————┼————┼———-┤"<<endl;cout<<"∣"<<setw(6)<<p1->num<<setw(3)<<"∣"<<setw(7)<<p1->name<<setw(2)<<"∣"<<setw(4)<<p1->age<<setw(4)<<"∣"<<setw(4)<<p1->hig<<setw(4)<<"∣"<<setw(5)<<p1->score[0]<<setw(4)<<"∣"<<setw(5)<<p1->score[1]<<setw(4)<<"∣"<<setw(5)<<p1->score[2]<<setw(4)<<"∣"<<setw(8)<<setprecision(3)<<p1->ave<<setw(4)<<"∣"<<setw(6)<<p1->sum<<setw(4)<<"∣"<<setw(7)<<p1->p_y<<setw(2)<<"∣"<<endl;cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ "<<endl;
////////////////////////////////////////////////////////////////////////////////////////////
////
////
////
////////////////////////////////////////////////////////////////////////////////////////////
class ji_ke_1_class
{
int num;
char name[20];
int age;
float hig;
int score[3];
float ave;
float sum;
char p_y[10];
public:
void set_date();
void display();
void creat();
void print();
void insert();
void exchange(ji_ke_1_class *p1,ji_ke_1_class *p2);
void sort(int j);
void index(int q,char aa[20]);
void del(int num);
void save();
void tongji();
void load();
class ji_ke_1_class *next;
};
ji_ke_1_class *head,*p1,*p2,*p;

void ji_ke_1_class::set_date ()
{
cout<<"學號_姓名_年齡_身高_"<<endl;
cin>>num>>name>>age>>hig;
cout<<"-----分數::語文_數學_英語_"<<endl<<" ";
for(int i=0;i<3;i++)
cin>>score[i] ;
}
void ji_ke_1_class::display()
{
ji_ke_1_class *p;
int i;
for( p=head , i=0 ; i<n ; i++ , p=p->next )
cout<<"∣"
<<setw(6)<<p->num
<<setw(3)<<"∣"
<<setw(7)<<p->name
<<setw(2)<<"∣"
<<setw(4)<<p->age
<<setw(4)<<"∣"
<<setw(4)<<p->hig
<<setw(4)<<"∣"
<<setw(5)<<p->score[0]
<<setw(4)<<"∣"
<<setw(5)<<p->score[1]
<<setw(4)<<"∣"
<<setw(5)<<p->score[2]
<<setw(4)<<"∣"
<<setw(8)<<setprecision(3)<<p->ave
<<setw(4)<<"∣"
<<setw(6)<<p->sum
<<setw(4)<<"∣"
<<setw(7)<<p->p_y
<<setw(2)<<"∣"
<<endl;
}
void ji_ke_1_class::print()
{
ji_ke_1_class *p0=head;
cout<<"╭—————————————————————————————————————————————╮"<<endl;
cout<<"∣ num ∣ name∣ age ∣ hig ∣ 語文 ∣ 數學 ∣ 英語 ∣ 平均 ∣ 總分 ∣ 評語 ∣ "<<endl;
cout<<"├———-┼———-┼———┼———┼———-┼———-┼———-┼—————┼————┼———-┤"<<endl;
p0->display();
cout<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ "<<endl;
}
void ji_ke_1_class::creat()
{
int m=0;
float total=0;
head=p2=p1=new ji_ke_1_class;
p1->set_date();
while(p1->num!=0)
{
n=n+1;
if(n==1)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new ji_ke_1_class;
p1->set_date ();
}
p2->next=0;
ji_ke_1_class *p=new ji_ke_1_class;
for(p=head ; m<n ; p=p->next )
{

total=total+p->score[0]+p->score[1]+p->score[2];
p->sum=total;
p->ave=total/3;
cout<<p->sum<<"--------__"<<p->ave<<endl;
if(p->ave>85) strcpy( p->p_y , "優秀" );
else if(p->ave>75) strcpy( p->p_y , "中等" );
else if(p->ave>60) strcpy( p->p_y , "及格" );
else strcpy( p->p_y , "不及格" );
total=0;
m+=1;
}
}
template<typename T1>
void exchang1(T1 &a,T1 &b)
{
int t;
t=a;
a=b;
b=t;
}
template<typename T2>
void exchang2(T2 &a,T2 &b)
{
float t;
t=a;
a=b;
b=t;
}
void ji_ke_1_class::exchange(ji_ke_1_class *p1,ji_ke_1_class *p2)
{
char t2[30],t1[10];
exchang1(p1->num,p2->num);
exchang1(p1->score[1],p2->score[1]);
exchang1(p1->score[0],p2->score[0]);
exchang1(p1->score[2],p2->score[2]);
exchang2(p1->hig,p2->hig);
exchang2(p1->ave,p2->ave);
exchang2(p1->sum,p2->sum);
strcpy(t2,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,t2);
strcpy(t1,p1->p_y );
strcpy(p1->p_y ,p2->p_y );
strcpy(p2->p_y ,t1);
}
void ji_ke_1_class::sort(int j)
{
ji_ke_1_class *p1,*p2;
int m,t;
cout<<endl;
for(p1=head , m=0 ; m<n-1 ; m++ , p1=p1->next)
for(p2=p1->next,t=m+1 ; t<n ; t++ , p2=p2->next)
{
if( (p1->num) > (p2->num) && j==1 ) exchange(p1,p2);
if( (p1->sum) < (p2->sum) && j==2 ) exchange(p1,p2);
}
print();
cout<<endl;
}
void ji_ke_1_class::del(int num)
{
ji_ke_1_class *p1,*p2;
if(head==0)
{
cout<<"\nlist null!\n";
goto end1;
}
p1=head;
while(num!=p1->num && p1->next!=0)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(p1==head) head=p1->next;
else p2->next=p1->next;
cout<<"\n"<<"恭喜你--deleted the:"<<num<<endl<<endl;
n=n-1;
}
else cout<<num<<"抱歉--好像沒有這個數吧!!\n"<<"\n\n";
end1: ;
}
void ji_ke_1_class::insert()
{
float total;
ji_ke_1_class *pt=new ji_ke_1_class;
ji_ke_1_class *p0,*p1,*p2;
pt=new ji_ke_1_class;
pt->set_date();
total=0;
int i;
for(i=0;i<3;i++)
total+=pt->score[i];
pt->sum=total;
pt->ave=total/3;
if(pt->ave>85) strcpy( pt->p_y , "優秀" );
else if(pt->ave>75) strcpy( pt->p_y , "中等" );
else if(pt->ave>60) strcpy( pt->p_y , "及格" );
else strcpy( pt->p_y , "不及格" );
p1=head;
p0=pt;
if(head==0)
{
head=p0;
p0->next=0;
}
else
{
while( (p0->num>p1->num)&&(p1->next!=0))

{
p2=p1;
p1=p1->next;
}

if(p0->num<=p1->num)
{
if(head==p1) head=p0;
else p2->next=p0;
p0->next=p1;
}

else
{
p1->next=p0;
p0->next=0;
}
}
n=n+1;
}
void ji_ke_1_class::index(int q,char aa[20])
{
ji_ke_1_class *p1=head;
int m=0,j=0;
int len,flag=1;
int a[4];
for( m=0 ; m<n ; p1=p1->next , m++ )
{
a[0]=0;a[1]=0;a[2]=0;a[3]=0;
flag=1;
a[0]=(int)( (p1->num)/1000 ); a[1]=(int)( (p1->num-a[0]*1000 )/100 );
a[2]=(int)( (p1->num-a[1]*100-a[0]*1000 )/10 ); a[3]=(int)( p1->num-a[1]*100-a[0]*1000-a[2]*10 );
for(int i=19 ; i>=0 ; i--)
{
if(aa[i]!=0)
len=i+1;
}
int m[4],k=0,y=0,x=0,d=0;
for(k=0;k<4;k++)
{
d=0;
y=(int)aa[k];
for(x=48;x<=57;x++)
{
d++;
if(x==y) m[k]=(d-1);
}
}
for(j=0 ; j<4 ; j++ )
{
if( a[j]!=m[j] )
flag=0;
}
if( flag==1 && q==1 )
{
NN
break;
}
if( p1->name[0]==aa[0] && p1->name[1]==aa[1] && p1->name[2]==aa[2] && q==2 )
{
NN
break;
}
}
if( m==n ) cout<<"no the student"<<endl;
}
int x[20];
string filename;
void ji_ke_1_class::save()
{
int d,d1=0;
int ii;
cout<<endl<<"請輸入存儲路徑(建議存入當前文件中的data_save中)(例 ---絕對路徑:C:\\\\文件名\\\\文件名\\\\數據名.dat \n "
<<" ---相對路徑:save\\\\數據名.dat; )"
<<endl
<<"路徑為:";
string cc;
cin>>cc;
cout<<" ╭——————————————╮"<<endl<<"正在保存 ";
for(ii=0;ii<15;ii++)
{
cout<<'\20';
Sleep(15);
}
ifstream file1("程序必用1.dat",ios::binary);
file1.read( (char *)&d , sizeof(d) );
d1=(int)d+1;
file1.close();
string filename0,name_file;
filename0=cc;
name_file=filename0.c_str();
ofstream file2("程序必用1.dat",ios::binary);
file2.write( (char *)&d1 , sizeof(d1) );
file2.close();
ofstream file3("程序必用2.dat", ios::app|ios::out );
file3<<name_file.c_str ()<<" ";
file3.close();
ofstream outfile(cc.c_str(),ios::binary);
if(!outfile)
{
cerr<<"!!!!!"<<endl;
abort();
}
outfile.write( (char *)&n , sizeof(n) );
ji_ke_1_class *p=head;
for(int i=0;i<n;i++,p=p->next)
outfile.write( (char *)p,sizeof(ji_ke_1_class));
outfile.close();
for(ii=0;ii<15;ii++)
{
cout<<'\20';
Sleep(15);
}
cout<<endl<<endl;
cout<<"-----已成功保存!!!!!!"<<endl<<endl;
}
void ji_ke_1_class::load()
{
int h1,h2;
string qq,name[20],name0[20];
ifstream file("程序必用1.dat",ios::binary);
if(!file)
{
cerr<<"open error!!"<<endl;
abort();
}
file.read( (char *)&h1, sizeof(h1) );
h2=int(h1);
cout<<"共有以下 "<<h2<<" 個文件"<<endl;

ifstream file0("程序必用2.dat",ios::in);
if(!file0)
{
cerr<<"open error!!"<<endl;
abort();
}
for(int e=0;e<h2;e++)
{
if(e%2==0) cout<<endl;
file0>>name[e];
name0[e]=name[e];
cout<<"第"<<e+1<<"個文件:"<<setw(16)<<(string)name0[e]<<" ; ";
}
file0.close();
cout<<endl;
loop3:
cout<<endl<<"請輸入路徑(例 ---絕對路徑:C:\\\\文件名\\\\文件名\\\\數據名.dat ---相對路徑:save\\\\數據名.dat;)"<<endl ;
cout<<"路徑為:";
string ccc;
cin>>ccc;
cout<<" ╭——————————————╮"<<endl<<"正在讀取 ";
int ii;
for(ii=0;ii<15;ii++)
{
cout<<'\20';
Sleep(15);
}
ifstream infile(ccc.c_str(),ios::binary);
int c;
ji_ke_1_class t[60],*pp[60];
if(!infile)
{
cout<<endl<<"無此文件; 1---重輸 ; other---放棄";
cin>>c;
if(c==1) goto loop3;
else goto loop4;
}
int nn,nnn;

int i;
infile.read( (char *)&nn , sizeof(nn) );
nnn=(int)nn;
n=nnn;
infile.read( (char *)&t[0] , sizeof(ji_ke_1_class) );
head=(ji_ke_1_class *)&t[0];
for(i=1; i<nnn; i++)
{
infile.read( (char *)&t[i] , sizeof(ji_ke_1_class) );
pp[i]=(ji_ke_1_class *)&t[i];
if(i==1)
{
head->next=pp[1];
}
if(i!=1)
{
pp[i-1]->next=pp[i];
}
}
infile.close();
for(ii=0;ii<15;ii++)
{
cout<<'\20';
Sleep(15);
}
cout<<endl;
cout<<endl<<"————————恭喜!!!成功裝載,數據文件以可以使用"<<endl<<endl;
loop4:;
}
void ji_ke_1_class::tongji()
{
ji_ke_1_class *pm=head;
int m,by=0,bz=0,bc=0,bj=0;
for(pm=head , m=0 ; m<n ; m++ , pm=pm->next)
{
if( pm->ave >= 85 ) by++;
if( pm->ave < 85 && pm->ave >=75 ) bz++;
if( pm->ave >=60 && pm->ave < 75 ) bj++;
if( pm->ave < 60 ) bc++;
}
cout<<endl
<<"總計 "<<n<<" 人:"<<endl
<<" 優秀生人數:"<<setw(5)<<by<<setw(12)<<"優秀率為:"<<setw(6)<<setprecision(5)<<(double)by/n<<endl
<<" 中等生人數:"<<setw(5)<<bz<<setw(12)<<"中等率為:"<<setw(6)<<setprecision(5)<<(double)bz/n<<endl
<<" 及格生(60-75)人數:"<<setw(5)<<bj<<setw(12)<<"及格率為:"<<setw(6)<<setprecision(5)<<(double)bj/n<<endl
<<" 不及格人數為:"<<setw(5)<<bc<<setw(12)<<"不及格率為:"<<setw(6)<<setprecision(5)<<(double)bc/n<<endl<<endl;
}
void bz()
{
system("cls");
M"歡"Y"迎"Y"使"Y"用"Y"本"Y"程"Y"序"Y"-"Y"-"Y"-"Y"-"Y"-"Y" 使"Y"用"Y"說"Y"明"Y":"N;cout<<endl<<endl;
M"一"Y""Y"、"Y"建"Y"立"Y"自"Y"己"Y"的"Y"數"Y"據"Y"("Y"建"Y"議"Y"馬"Y"上"Y"存"Y"儲"Y"!"Y"!"Y")"Y"按"Y"提"Y"示"Y"操"Y"作"Y"即"Y"可"Y";"Y"呵"Y"呵"N;cout<<endl<<endl;
M"二"Y""Y"、"Y"注"Y"意"Y"事"Y"項"Y":"Y" 對"Y"鏈"Y"表"Y"("Y"數"Y"據"Y")"Y"若"Y"超"Y"過"Y"6"Y"0"Y"個"Y","Y"則"Y"請"Y"聯"Y"系"Y""Y""Y"呂"Y""Y""Y"威"Y""Y""Y"___"Y"qq"Y":"Y"921963406"Y","Y"可"Y"免"Y"費"Y"贈"Y"送"Y"所"Y"需"Y"程"Y"序"N;cout<<endl<<endl;
M"三"Y""Y"、"Y"建"Y"鏈"Y"表"Y"的"Y"最"Y"後"Y"使"Y"全"Y"為"Y"0"Y","Y"建"Y"表"Y"結"Y"束"N;cout<<endl<<endl;
M"四"Y""Y"、"Y"因"Y"技"Y"術"Y"有"Y"限"Y","Y"清"Y"屏"Y"函"Y"數"Y"造"Y"成"Y"head"Y"丟"Y"失"Y";"Y"慎"Y"用"Y"!"Y"!"N;cout<<endl<<endl<<" ";
M"制"Y"作"Y"人"Y":"Y""Y""Y""Y""Y"呂"Y""Y""Y""Y""Y"威"Y""Y""Y""Y""N;cout<<endl<<endl;

}

////////////////////////////////////////////////////////////////////////////////////////////
////
////
////////////////////////////////////////////////////////////////////////////////////////////
void mult()
{tm * tp;
time_t t;
cout<<"____________________________________________________________________________________________________\n";
cout<<" ╭——————————————╮\n"
<<" ";
t=time(NULL);
tp=localtime(&t);
cout<<tp->tm_mon+1<<"-"<<tp->tm_mday<<"-"<<tp->tm_year+1900<<" ";
cout<<tp->tm_hour<<":"<<tp->tm_min<<":"<<tp->tm_sec;
cout<<" ∣ 菜單 ∣ \n"
<<" ∣____________________________∣\n"
<<" ∣ 0---創建數據 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 1---按學號排序 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 2---按分數排序 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 3---刪除一學生信息 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 4---插入一學生信息 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 5---檢索一學生 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 6---統計數據 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 7---保存 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 8---打開 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 9---清屏 ∣\n"
<<" ∣ ∣\n"
<<" ∣ 10--幫助(建議先看) ∣\n"
<<" ∣ other---quit ∣\n"
<<" ∣ ∣\n"
<<"  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n";
}
void select()
{
int fl=0,a,num2;
ji_ke_1_class aa;
loop:
cout<<"What can I do for you ? ? ?(輸入命令---數字) :";
cin>>a;
switch(a)
{
case 0 :
{
cout<<"輸入數據\n";
aa.creat();
aa.print();
goto loop;
}
case 1 :
{
aa.sort(1);
goto loop;
}
case 2 :
{
aa.sort(2);
goto loop;
}
case 3 :
{
cout<<"num========";
cin>>num2;
aa.del(num2);
goto loop;
}
case 4 :
{
aa.insert();
goto loop;
}
case 5 :
{
char xx[20]={0};
cout<<"輸入要查詢的學生的學號 或 姓名:";
cin>>xx;
if( xx[0]>=48 && xx[0]<=57 )
aa.index(1,xx);
else
aa.index(2,xx);
goto loop;
}
case 6 :
{
aa.tongji();
goto loop;
}
case 7 :
{
aa.save();
fl=1;
goto loop;
}
case 8 :
{
aa.load();
goto loop;
}
case 9 :
{
ji_ke_1_class *nn=new ji_ke_1_class;
head=nn;
system("cls");//清屏造成head丟失-------------------------------------------------------??????????????????
nn=head;
mult();
goto loop;
}
case 10 :
{
bz();
mult();
goto loop;
}
default :
{
if(fl=0)
{
char f;
cout<<"你想要儲存嗎?y/N";
cin>>f;
if(f=='y'||f=='y')
{
aa.save();
fl=1;
goto loop;
}
else goto end;
}
else goto end;
}
}
end:;
}

void main()
{
int q2=0;
ifstream file0("程序必用1.dat",ios::binary);
if(!file0)
{
file0.close();
ofstream file1("程序必用1.dat",ios::binary);
file1.write( (char *)&q2 , sizeof(q2) );
file1.close();
goto loop5;
}
file0.close();
loop5:
mult();
select();
}

D. 簡單學生成績管理系統

//基本的都有了,c 的,文字說明自己加。有問題再找。
#include<iostream>
#include<string>
#include<fstream>
using namespace std;

struct Student
{
string num;
double gra1;
double gra2;
double gra3;
double ave;
int t;//標志是不是被刪除的。
};
Student stu[100];
int n;// 表示總人數
Student temp;
//輸入成績
void Input()
{
int t,i;
t=n;
for(i=0;i<n;i )
{
(stu[i].t==0) {t=i;break;}
}
cin>>temp.num>>temp.gra1 >>temp.gra2 >>temp.gra3 ;

stu[t]=temp;
stu[t].t=1;
if(t==n) n ;

}

void Sort()
{
int i,j;

for(i=0;i<n;i )
{
for(j=i 1;j<n;j )
{
if(stu[j].ave>stu[j-1].ave)
{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
void Ave()
{
int i;
for(i=0;i<n;i ) stu[i].ave=(stu[i].gra1 stu[i].gra2 stu[i].gra3 )/3;
}

void Dis ()
{
int i;
for(i=0;i<n;i )
{
if(stu[i].t==1)
{
cout<<stu[i].num<<" "<<stu[i].gra1<<" "<<stu[i].gra2
<<" "<<stu[i].gra3<<" "<<stu[i].ave<<endl;
}
}
}
void Del(int t)
{
int i;
string name;
cin>>name;
int p=-1;
for(i=0;i<n;i )
{
if(stu[i].t==1

E. 學生成績管理系統

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# include <string.h>
# include <conio.h>

void menu(struct student *parr,int len);
void sore(struct student *parr,int len);
void output(struct student *parr,int *len);
void input(struct student *parr,int len);
void write(struct student *parr,int len);
void read(struct student *parr,int len);
void find(struct student *parr,int len);
void logout(struct student *parr,int len);
void exit(struct student *parr,int len);
void modify(struct student *parr,int len);
void insert(struct student*parr,int *len);

struct student
{
int number;//學號
float score;//成績
char name[10];//姓名
};

int main(void)
{
struct student * parr;
int len = 0;
char ch = '\0';

printf("請輸入需要存入的學生人數:");
scanf("%d",&len);

parr = (struct student *)malloc((sizeof(struct student) * len));

menu(parr, len);
printf("按回車鍵繼續\n");
while(1)
{
system("cls");
printf("\n\n\n\n");
printf("\t\t|******************************************|\n");
printf("\t\t|--------------- 學生管理系統 -------------|\n");
printf("\t\t|------------ 1.寫入學生信息 ---------|\n");
printf("\t\t|------------ 2.查看全部學生信息 ---------|\n");
printf("\t\t|------------ 3.按成績排序 ---------|\n");
printf("\t\t|------------ 4.按學號查找 ---------|\n");
printf("\t\t|------------ 5.修改學生信息 ---------|\n");
printf("\t\t|------------ 6.添加學生 ---------|\n");
printf("\t\t|------------ 7.保存 ---------|\n");
printf("\t\t|------------ 0.退出 ---------|\n");
printf("\t\t|******************************************|\n");
printf("\t\t\n");
scanf(" %c",&ch);

switch(ch)
{
case '1' : input(parr,len); break;
case '2' : output(parr,&len); break;
case '3' : sore(parr,len); break;
case '4' : find(parr,len); break;
case '5' : modify(parr,len); break;
case '6' : insert(parr,&len); break;
case '7' : write(parr,len); break;
case '0' : exit(parr,len); break;
default : printf("\n\t輸入錯誤!按回車鍵返回主菜單!");
getch();
}
}

free(parr);

return 0 ;
}

//函數功能:實現按成績排序
void sore(struct student *parr,int len)
{
int i,j;
struct student t;

for( i = 0; i < len - 1; i++)
{
for(j = 0; j < len; j++)
if( parr[j+1].score > parr[j].score )
{
t = parr[j+1];
parr[j+1] = parr[j];
parr[j] = t;
}

}
output(parr,&len);
return;
}

//函數功能:列印信息
void output(struct student *parr,int *len)
{
int i;
for(i = 0;i < *len; i++)
printf("姓名:%s 成績:%.2f 學號:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("\n");
getchar();
getchar();
return;
}

//函數功能:輸入數據
void input(struct student *parr,int len )
{ int i;
for( i = 0; i < len; i++)
{
printf("請輸入第%d個學生信息:",i + 1);

printf("姓名:");
scanf("%s",parr[i].name);//name是數組名 本身就是地址

printf("成績: ");
scanf("%f",&parr[i].score);

printf("學號:");
scanf("%d",&parr[i].number);
}
printf("\n");
return;
}

/*函數功能:將數據寫入文件*/
void write(struct student *parr,int len)
{
int i;//控制循環
FILE *fp = NULL;//定義文件指針
fp = fopen("D:\\student.txt","w");//打開文件並使文件指針指向它,以寫的方式
if(fp == NULL)//如果文件沒有打開,提示錯誤並退出
{
printf("\n\t文件沒有打開!程序結束!");
getchar();//等待用戶觀察
exit(0);//結束整個程序
}
else
{
for(i=0; i<len; i++)//將數據依次寫入文件
{
fprintf(fp, "姓名:%s 成績:%.2f 學號:%d\n",parr[i].name,parr[i].score,parr[i].number);
}
}
printf("已將學生信息保存在了D盤根目錄下的student.txt文件中。\n");
getch();
fclose(fp);
return;
}
/*函數功能:讀取文件數據*/
void read(struct student *parr,int len)
{
int i;
FILE * fp = NULL;

fp = fopen("D:\\student.txt","r");//以只讀的方式打開文件

if(fp == NULL)
{
printf("數據讀取失敗!\n");
getchar();
exit(0);
}
else
{
for(i=0; i<len; i++)
{
fscanf(fp,"%s,%d,%.2f\n",parr[i].name,parr[i].number,parr[i].score);
}
}

fclose(fp);
return;
}

/*函數功能:按學號找學生信息*/
void find(struct student *parr,int len)
{
int number= 0;
int i;

printf("請您輸入需要查找的學號:");
scanf("%d",&number);

for( i=0; i<len; i++ )
{
if(number == parr[i].number)
{
printf("姓名:%s 成績:%.2f 學號:%d\n",parr[i].name,parr[i].score,parr[i].number);
}

}
getch();
return;
}

/*函數功能:注銷學生信息*/
void logout(struct student *parr,int len)
{
char ch = '\0';
find(parr,len);
printf("您確定要注銷該學生嗎?確定請按 Y,返回主菜單請按 N !\n");
scanf("%d",&ch);

if((ch == 'Y') || (ch == 'y'))
{

}
return;
}

void menu(struct student *parr,int len)
{
printf("\t\t||=========================================||\n");
printf("\t\t||-----------------------------------------||\n");
printf("\t\t||-----------歡迎使用學生管理系統----------||\n");
printf("\t\t||-----------------------------------------||\n");
printf("\t\t||=========================================||\n");
getchar();
getchar();
system("cls");
return;
}
/*函數功能:結束整個程序*/
void exit(struct student *parr,int len)
{// getchar();
char ch = '\0';

do
{
printf("您確定要退出!(y/n):");
scanf(" %c",&ch);
}while((ch != 'Y') && (ch != 'y') && (ch != 'N') && (ch != 'n'));
if((ch == 'Y') || (ch == 'y'))
{
exit(0);
}

return;
}

/*函數功能:修改學生信息*/
void modify(struct student *parr,int len)
{
int number = 0;
char ch = '\0';
int i;
printf("請您輸入要修改的學生的學號:");
scanf("%d",&number);

for( i=0; i<len; i++ )
{
if(number == parr[i].number)
{
printf("姓名:%s 成績:%.2f 學號:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("您確定要修改該學生信息(y/n)");
scanf(" %c",&ch);
if(ch == 'y')
{
printf("請輸入姓名:");
scanf("%s",parr[i].name);

printf("請輸入成績:");
scanf("%f",&parr[i].score);

printf("請輸入學號:");
scanf("%d",&parr[i].number);

printf("姓名:%s 成績:%.2f 學號:%d\n",parr[i].name,parr[i].score,parr[i].number);
printf("修改成功!");
getch();
}
else
{
printf("沒有找到該學生");
getch();
break;
}

}

}
return;
}

/*函數功能:添加學生*/
void insert(struct student *parr,int *len)
{
int number = 0;//添加學生的個數
int i;
printf("請輸入您要添加幾個學生信息:");
scanf("%d",&number);

parr = (struct student *)malloc((sizeof(struct student) * (*len+number)));

for(i=*len; i<*len+number;i++)
{
printf("請輸入第%d個學生信息:",i + 1);

printf("姓名:");
scanf("%s",parr[i].name);

printf("成績: ");
scanf("%f",&parr[i].score);

printf("學號:");
scanf("%d",&parr[i].number);
}
output(parr,&*len);
}

F. 學生成績管理系統

#include "stdafx.h"
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
// 循環列表結構 head->[,->next]...[data0,->next][data1,->next]...[datan,->head]
struct SCORE
{
int courseId;
int score;
SCORE *pnext;
};
struct STU_SCORE
{
char name[16];
int stuId;
SCORE *scoreHead;//學生課程成績列表
struct STU_SCORE *pnext;
STU_SCORE(int ID,char names[])
{
int len=strlen(names);
for(int i=0;i<len;++i)
name[i]=names[i];
name[len]='\0';
stuId=ID;
}
};
int mainMenu();
int stuReg(STU_SCORE *pHead);
int selCourse(STU_SCORE *pHead);
int inputData(STU_SCORE *pHead);
int scoreSort(STU_SCORE *pHead);
int scoreQuery(STU_SCORE *pHead);
int modify(STU_SCORE *pHead);
enum MAIN_CMD{REG,SEL=1,INPUT,QUERY,MODI,EXIT};
int main(int argc, char* argv[])
{
STU_SCORE *head=( STU_SCORE *)malloc(sizeof(STU_SCORE));
head->stuId=-1;
head->pnext=head;
while(1)
{
int cmd=mainMenu();
switch(cmd)
{
case REG:
stuReg(head);
break;
case SEL:
selCourse(head);
break;
case INPUT:
inputData(head);
break;
case QUERY:
scoreQuery(head);
break;
case MODI:
modify(head);
break;
case EXIT:
return 0;
}
}
return 0;
}
int mainMenu()
{
system("cls");
cout<<"\t\t《學生成績管理系統》\n";
cout<<" \t\t[0]新生注冊\n";
cout<<" \t\t[1]選課登記\n";
cout<<" \t\t[2]學生成績輸入\n";
cout<<" \t\t[3]成績查詢\n";
cout<<" \t\t[4]修改成績\n";
cout<<" \t\t[5]退出\n";
cout<<"命令? ";
int cmd;
cin>>cmd;
return cmd;
}
//新生注冊:建立學生信息鏈表,從鍵盤輸入學生姓名學號,插入到鏈表中。
int stuReg(STU_SCORE *pHead)
{
cout<<"注意:新生注冊學號不能重復!\n";
start:
cout<<"學號\t\t姓名\n";
int ID;
char StudentName[20];
cin>>ID;
while(ID>0)
{
cin>>StudentName;
STU_SCORE *newStu=new STU_SCORE(ID,StudentName);
newStu->scoreHead=new SCORE();
newStu->scoreHead->pnext=newStu->scoreHead;
STU_SCORE*q=pHead->pnext,*p=pHead;
while(q!=pHead)
{
p=q;
if(q->stuId<newStu->stuId)
q=q->pnext;
else
break;
}
p->pnext=newStu;
newStu->pnext=q;
cin>>ID;
}
int cnt=0;
STU_SCORE*q=pHead->pnext;
while(q!=pHead)
{
q=q->pnext;
cnt++;
}
cout<<"學生資料庫共有"<<cnt<<"個記錄"<<endl;
cout<<"繼續新的注冊?";
char c;
cin>>c;
if(c=='y'||c=='Y')goto start;
return 0;

}
//學生選課
int selCourse(STU_SCORE *pHead)
{
start:
int cid;
cout<<"課程號:";
cin>>cid;
cout<<"輸入選擇該課程的學生學號:\n";
int stuId;
cin>>stuId;
while(stuId>0)
{
STU_SCORE *pStu=pHead->pnext;

while(pStu!=pHead)//鏈表已有記錄
{
if(pStu->stuId==stuId)//有該學號
{
bool be=false;
SCORE *pcourse=pStu->scoreHead->pnext;
while(pcourse!=pStu->scoreHead)//已有選課
{
if(pcourse->courseId==cid)
{
be=true;////已有該選課
break;
}
pcourse=pcourse->pnext;
}
if(!be)
{ //還沒有選此課程
SCORE *pNewcourse=(SCORE *)malloc(sizeof(SCORE));
pNewcourse->courseId=cid;
SCORE*q=pStu->scoreHead->pnext;
pStu->scoreHead->pnext=pNewcourse;
pNewcourse->pnext=q;
}
}
pStu=pStu->pnext;
}
cin>>stuId;
}
int count=0;
STU_SCORE *pStu=pHead->pnext;
while(pStu!=pHead)//鏈表已有記錄
{
SCORE *pcourse=pStu->scoreHead->pnext;
while(pcourse!=pStu->scoreHead)
{
if(pcourse->courseId==cid)
{
count++;
}
pcourse=pcourse->pnext;
}
pStu=pStu->pnext;
}
cout<<"共有"<<count<<"個學生選此課程\n";
cout<<"繼續新的選課輸入?";
char c;
cin>>c;
if(c=='y'||c=='Y')goto start;
return 0;
}
//學生成績輸入
int inputData(STU_SCORE *pStuHead)
{
int count;
start:
count=0;
cout<<"課程號:";
int cid;
cin>>cid;
STU_SCORE *pStu=pStuHead->pnext;
while(pStu!=pStuHead)//if鏈表已有學生記錄
{
SCORE *pcourse=pStu->scoreHead->pnext;
while(pcourse!=pStu->scoreHead)
{
if(pcourse->courseId==cid)
{
cout<<"學號:"<<pStu->stuId<<" 姓名:"<<pStu->name;
cout<<" 成績:";
if(pcourse->score>=0)
cout<<"已輸入";
else
{
cin>>pcourse->score;
count++;
}
break;
}
pcourse=pcourse->pnext;
}
pStu=pStu->pnext;
}
if(count==0)
cout<<"該課程無學生選!\n";
else
cout<<cid<<"課程成績已輸入完成!"<<"\n";
cout<<"繼續其他課程成績輸入?";
char c;
cin>>c;
if(c=='y'||c=='Y')goto start;
return 0;
}
//課程成績查詢
int scoreQuery(STU_SCORE *pStuHead)
{
start:
int ID;
cout<<"學號:"<<endl;
cin>>ID;
STU_SCORE*pStu=pStuHead->pnext;
while(pStu!=pStuHead)
{
if(pStu->stuId==ID)
{
cout<<"姓名:"<<pStu->name<<"\t"<<"成績:"<<endl;
SCORE*pcourse=pStu->scoreHead->pnext;
while(pcourse!=pStu->scoreHead)
{
cout<<"課程號:"<<pcourse->courseId<<"\t"<<"成績:"<<pcourse->score<<endl;
pcourse=pcourse->pnext;
}
break;
}
pStu=pStu->pnext;
}
if(pStu==pStuHead)
{
cout<<"查無此人"<<endl;
}
cout<<"繼續查詢?";
char c;
cin>>c;
if(c=='y'||c=='Y')
goto start;
return 0;
}
//課程成績修改
int modify(STU_SCORE *pStuHead)
{
start:
int ID;
cout<<"學號:";
cin>>ID;
STU_SCORE*pStu=pStuHead->pnext;
while(pStu!=pStuHead)
{
if(pStu->stuId==ID)
{
int cid;
cout<<"課程號:";
cin>>cid;
SCORE*pcourse=pStu->scoreHead->pnext;
while(pcourse!=pStu->scoreHead)
{
if(pcourse->courseId==cid)
{
int rescore;
cout<<"原成績:"<<pcourse->score<<"\t"<<"成績修改為:";
cin>>rescore;
pcourse->score=rescore;
goto ask;
}
pcourse=pcourse->pnext;
}
if(pcourse==pStu->scoreHead)
{
cout<<"此人沒有選擇該課程。"<<endl;
goto ask;
}
}
pStu=pStu->pnext;
}
if(pStu==pStuHead)
{
cout<<"查無此人"<<endl;
}
ask:
cout<<"繼續修改?";
char c;
cin>>c;
if(c=='y'||c=='Y')
goto start;

return 0;
}

G. 學生成績管理程序

c++學生成績管理系統論文--課程設計[日期:2007-01-19] 來源:25175--你我一起舞 作者:未知 閱讀:3593 次 [字體:大 中 小] c++學生成績管理系統論文--課程設計powered by 25175.net

1、 對C++設計的《學生成績管理系統》總體說明

系統上採用BC31編譯器作為開發環境,這個環境是我們在學習C++的平台,這個編譯器功能完善,使用方便。我作的這次課程設計是《學生成績管理系統》,它的主要功能是對學生的成績進行修改和管理,而且方便快速,這個程序雖然簡單,但是可以作為老師的輔助軟體,對學生的各種成績進行管理。

系統功能要求:

(1)界面

****************************

學生成績管理系統

****************************

************************************

** F1 --幫助 **

** F2 --輸入數據並存入文件 **

** F3 --根據學號查詢成績 **

** F4 --根據姓名查詢成績 **

** F5 --輸出文件內容 **

** F6 --統計及格和優秀人數 **

** ESC--退出系統 **

************************************

(2)功能

這個程序的主要功能是輸入學生的學號、姓名對其進行存儲,在存儲後可以對學生的成績按學號和姓名進行查尋。該系統具有存貯學生數據,按學號、姓名查詢,列出學生成績和統計功能。使用方法:系統輸入數據後,將在當前目錄中建立一個名為stu.dat文件,用於保存輸入的數據。學號輸入只能用數字輸入,並且學號只能是10位。姓名輸入符合中國人的姓名,只能用中文,且最長為5個漢字。此程序在BC2.0下運行通過由於是第一次用C++編寫,所以水平有限此系統還有許多不夠完整和嚴密性,敬請老師指正!

(3)實用性

《學生成績管理系統》是對學生的成績進行修改和管理,而且方便快速,這個程序雖然簡單,但是可以作為老師的輔助軟體,對學生的各種成績進行管理。

目的:

通過課程設計培養了我的動手能力以及綜合運用所學的C++語言基礎理論,基礎知識,基本技能,進行程序分析和程序開發,提高在實際開發中解決問題的能力,達到了能夠利用C++語言進行應用程序的規劃,分析,設計和實施,更能進一步使我對這門語言有深刻的理解和更好的得到鞏固,更能對我所學的知識得到檢驗。

2、對《學生成績管理系統》的介紹

具體的功能:

(1)幫助

(2)輸入數據並存入文件

(3)根據學號查詢成績

(4)根據姓名查詢成績

(5)輸出文件內容

(6)統計及格和優秀人數

(7)退出

(1)幫助

運行程序,屏幕出現該程序界面,第一項就是幫助,在按下「F1」後出現幫助信息,「此系統是應老師所布置的作業編制而成,該系統具有存貯學生數據,按學號、姓名查詢,列出學生成績和統計功能。使用方法:系統輸入數據後,將在當前目錄中建立一個名為stu.dat文件,用於保存輸入的數據。學號輸入只能用數字輸入,並且學號只能是10位。姓名輸入符合中國人的姓名,只能用中文,且最長為5個漢字。」

(2)輸入數據並存入文件

在界面狀態下,按下「F2」後出現「請輸入學號:」,若輸入「#」,則返回真值結束輸入。在其後面可以輸入學生的學號,長度要求10位而且必須是數字,這里用到了結構體變數和函數,對輸入的字元進行判斷,如果輸入字母和漢字會出現「非法學號!請重新輸入。」,如果學號長度不為10,則返回重新輸入提示「學號長度不對。」, 如果學號後面的字元不是回車符,則學號長度大於10提示「學號長度大於10個!請重新輸入!」 輸入完學號後會出現提示「請輸入姓名:」,在其後面可以輸入學生的姓名,姓名必須是漢字而且長度必須是5, 這里也用到了結構體變數和函數,對輸入的字元進行判斷,如果輸入為字母和數字會提示「姓名只能用中文,請重新輸入!」,如果輸入的漢字長度大於5會提示「姓名長度大於5個!請重新輸入!」,輸入姓名後會出現「請輸入數學成績:」、「 請輸入英語成績:」和「請輸入總評成績:」輸入規則也和前面輸入學號、姓名的類似,判斷輸入的是否為數字,如果不是就會出現提示,重新輸入,直到輸入正確為止。都輸入完成後,改系統會調用寫文件函數對指定的文件進行寫操作,把輸入的學生信息寫入到文件中。

(3)根據學號查詢成績

在界面狀態下,在按下「F3」後會出現「請輸入要查詢的學號:」 輸入「#」結束查詢,若文件打不開則輸出下面的信息,「文件打開失敗!按任意鍵返回...」,如果文件打開會按照用戶的要求從文件頭開始查詢滿足要求的學號,找到即顯示該學生的基本信息和成績。如果未找到就會顯示「無此學號」。

(4)根據姓名查詢成績

在界面狀態下,在按下「F4」後會出現「請輸入要查詢的學生姓名:」 輸入「#」結束查詢,若文件打不開則輸出下面的信息,「文件打開失敗!按任意鍵返回...」,如果文件打開會按照用戶的要求從文件頭開始查詢滿足要求的姓名,找到即顯示該學生的基本信息和成績。如果未找到就會顯示「無此學生!」。

(5)輸出文件內容

輸出文件,列出所有學生成績。如果文件未打開會出現「文件打開失敗!按任意鍵返回...」打開成功會每輸出20個學生成績,停一下提示,「請按任意鍵繼續...」,關閉文件。

(6)統計及格和優秀人數

這里用到結構體函數和變數,判斷成績大於等於60分的為及格,並統計人數,判斷成績大於等於80分的為優秀,並統計人數,最後統計出來,顯示在屏幕上。

(7)退出

在界面狀態下,按下「ESC」會退出該學生成績管理系統。返回源程序。

程序清單

/*-------------1-------------*/

#include<bios.h>

#include<dos.h> /*頭文件*/

#include<conio.h>

#include<ctype.h>

#include<process.h>

#include<stdlib.h>

#include<stdio.h>

#include<string.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];

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(NO<48||NO>57)

{ puts("\t\t\t非法學號!請重新輸入!\n");

return 0;

}

else p++; /*指針加1*/

}

if(strlen(stu_num)!=10) /*若學號長度不為10,則返回重新輸入*/

{ puts("\t\t\t學號長度不對!\n");

return 0;

}

if(getchar()!='\n') /*若學號後面的字元不是回車符,則學號長度大於10*/

{ printf("\t\t\t學號長度大於10個!請重新輸入!\n");

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\t學號重復,請重新輸入!\n");

printf("\t\t\t該學生成績如下:\n");

printf("\t\t\t語文:%.1f\n",stud.CJ[0]);

printf("\t\t\t數學:%.1f\n",stud.CJ[1]);

printf("\t\t\t英語:%.1f\n",stud.CJ[2]);

printf("\t\t\t總評:%.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\t\t學號長度不對!\n");

return 0;

}

while(*p!='\0') /*學號必須用數字,若包含有字母,或其它字元則返回假值重新輸入*/

{ NO=(int)*p;

if(NO<48||NO>57)

{ puts("\t\t\t非法學號!請重新輸入!\n");

return 0;

}

else p++; /*指針加1*/

}

if(getchar()!='\n') /*檢驗學號長度是否大於10,並把多餘的字元去掉*/

{ printf("\t\t\t學號長度大於10個!請重新輸入!\n");

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(PD>0)

{ puts("\t\t\t姓名只能用中文,請重新輸入!\n");

return 0;

}

else p++; /*使指針加1,指向下一漢字*/

}

if(getchar()!='\n') /*姓名長度不得大於5個*/

{ printf("\t\t\t姓名長度大於5個!請重新輸入!\n");

do{}while(getchar()!='\n');

return 0;

}

return 1; /*字元串全為漢字返回真*/

}

/*-------------5-------------*/

int JY_CJ(float stu_CJ) /*學生成績只能在0~100之間*/

{

if(stu_CJ<0||stu_CJ>100)

{ printf("\t\t\t輸入錯誤,成績只能在0~100之間!\n");

return 0;

}

return 1;

}

/*-------------6-------------*/

void CreatFile() /*輸入文件*/

{ FILE *fp;

struct stuType stu,stu0={"","",}; /*對stu0先賦值*/

fp=fopen("stu.dat","wb+"); /*打開或創建一個二進制文件,打開時將原來的內容刪除*/

if(fp==NULL)

{ printf("\t\t\t文件打開失敗!\n\t\t\t按任意鍵返回...");

getch();

return;

}

else

{ while(1)

{ stu=stu0;

do{ printf("\n\t\t\t請輸入學號:"); /*輸入學號並檢驗其正確性*/

scanf("%10s",stu.NO);

}while(!JY_NO(stu.NO,fp));

if(strcmp(stu.NO,"#")==0)break;

do{ printf("\n\t\t\t請輸入姓名:"); /*輸入姓名並檢驗其正確性*/

scanf("%10s",stu.XM);

}while(!JY_XM(stu.XM));

do{ printf("\n\t\t\t請輸入語文成績:"); /*輸入成績並檢驗其正確性*/

scanf("%f",&stu.CJ[0]);

}while(!JY_CJ(stu.CJ[0]));

do{ printf("\n\t\t\t請輸入數學成績:"); /*同上*/

scanf("%f",&stu.CJ[1]);

}while(!JY_CJ(stu.CJ[1]));

do{ printf("\n\t\t\t請輸入英語成績:");

scanf("%f",&stu.CJ[2]);

}while(!JY_CJ(stu.CJ[2]));

do{ printf("\n\t\t\t請輸入總評成績:");

scanf("%f",&stu.CJ[3]);

}while(!JY_CJ(stu.CJ[3]));

fwrite(&stu,sizeof(struct stuType),1,fp); /*寫文件*/

}

}

fclose(fp); /*關閉文件*/

}

/*-------------7-------------*/

void Search_Xuehao() /*按學號查詢*/

{ FILE *fp;

int flag;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL) /*若文件打不開則輸出下面的信息*/

{ printf("\t\t\t文件打開失敗!\n\t\t\t按任意鍵返回...");

getch();

return;

}

else

{ do{ puts("\n\t\t\t輸入「#」結束查詢");

do{ printf("\t\t\t請輸入要查詢的學號:");

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\t\t該學生成績如下:");

printf("\t\t\t學號:%s\n",stud.NO);

printf("\t\t\t姓名:%s\n",stud.XM);

printf("\t\t\t語文:%.1f\n",stud.CJ[0]);

printf("\t\t\t數學:%.1f\n",stud.CJ[1]);

printf("\t\t\t英語:%.1f\n",stud.CJ[2]);

printf("\t\t\t總評:%.1f\n",stud.CJ[3]);

flag=1; /*記錄學號是否查到*/

}

}

if(flag==0)puts("\t\t\t無此學號!");

}while(strcmp(stu.NO,"#")!=0);

}

fclose(fp); /*關閉文件*/

}

/*-------------8-------------*/

void Search_Xingming() /*按姓名查找*/

{ FILE *fp;

int flag=0;

struct stuType stu,stud;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打開失敗!\n\t\t\t按任意鍵返回...");

getch();

return;

}

else

{ do{

do{ printf("\t\t\t請輸入要查詢的學生姓名:");

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\t\t該學生姓名如下:");

printf("\t\t\t學號:%s\n",stud.NO);

printf("\t\t\t姓名:%s\n",stud.XM);

printf("\t\t\t語文:%.1f\n",stud.CJ[0]);

printf("\t\t\t數學:%.1f\n",stud.CJ[1]);

printf("\t\t\t英語:%.1f\n",stud.CJ[2]);

printf("\t\t\t總評:%.1f\n",stud.CJ[3]);

flag=1; /*記錄姓名是否被查到*/

}

}

if(flag==0)puts("\n\t\t\t無此學生!");

puts("\t\t\t是否繼續(y--繼續,其他返回)?");

}while(getch()=='y');

}

fclose(fp);

/* puts("\t\t\t請按任意鍵繼續...");*/

/* getch();*/

}

/*-------------9-------------*/

int ListFile(void) /*輸出文件,列出所有學生成績*/

{ FILE *fp;

int REC=0; /*記錄學生人數*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打開失敗!\n\t\t\t按任意鍵返回...");

getch();

return 1;

}

else{ printf("\t\t\t學生成績如下:\n");

printf("\t\t\t學號\t\t姓名\t語文\t數學\t英語\t總評\n");

rewind(fp);

while(fread(&stu,sizeof(struct stuType),1,fp))

{ /*每讀取一個長度的數據就輸出*/

printf("\t\t\t%s",stu.NO);

printf("\t%s",stu.XM);

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\t\t請按任意鍵繼續...\n");

getch();

}

}

}

fclose(fp); /*關閉文件*/

printf("\t\t\t請按任意鍵繼續...");

getch();

}

/*-------------10-------------*/

void Statistics() /*統計及格和優秀人數*/

{ FILE *fp;

int REC=0,pass[4]={0},good[4]={0}; /*REC--記錄個數,即人數,pass--及格人數,good--優秀人數*/

float highest[4]={0},score[4]={0}; /*highest--最高分,score--總分*/

struct stuType stu;

fp=fopen("stu.dat","rb");

if(fp==NULL)

{ printf("\t\t\t文件打開失敗!\n\t\t\t按任意鍵返回...");

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)pass[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)pass[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)pass[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)pass[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\t\t未輸入學生記錄!按任意鍵返回...");

getch();

return;

}

else{

printf("\t\t\t\t 語文\t 數學\t 英語\t 總評\n"); /*輸出統計信息*/

printf("\t\t\t平均分: %.1f\t %.1f\t %.1f\t %.1f\n",score[0]/REC,score[1]/REC,score[2]/REC,score[3]/REC);

printf("\t\t\t最高分: %.1f\t %.1f\t %.1f\t %.1f\n",highest[0],highest[1],highest[2],highest[3]);

printf("\t\t\t優秀人數:%d\t %d\t %d\t %d\n",good[0],good[1],good[2],good[3]);

printf("\t\t\t及格人數:%d\t %d\t %d\t %d\n",pass[0],pass[1],pass[2],pass[3]);

}

}

fclose(fp);

printf("\n\t\t\t請按任意鍵繼續...");

getch();

}

/*-------------11-------------*/

void HelpMessage()

{ clrscr();

printf("\n\n\n\n\n 此系統是應老師所布置的作業編制而成,該系統具有存貯學生數據,按學號、姓名查詢,列出學生成績和統計功能。\n \n 使用方法:系統輸入數據後,將在當前目錄中建立一個名為stu.dat文件,用於保存輸入的數據。學號輸入只能用數字輸入,並且學號只能是10位。姓名輸入符合中國人的姓名,只能用中文,且最長為5個漢字。\n 此程序在Turbo C2.0下運行通過\n\n 由於是初學者,水平有限此系統還有許多不夠完整和嚴密性,敬請指正!");

getch();

}

/*-------------12-------------*/

int GetKey(void) /*此函數返回一個按鍵的數值*/

{ int key;

key=bioskey(0); /*bioskey為調用BIOS鍵盤介面*/

if(key<<8) /*位移*/

{

key=key&0x00ff;

}

return key; /*返回按鍵*/

}

/*-------------13-------------*/

void main()

{ int key;

struct date d; /*定義時間結構體*/

getdate(&d); /*讀取系統日期並把它放到結構體d中*/

clrscr(); /*清除屏幕*/

printf("\n\n\n\n\n");

printf("\t\t\t****************************\n"); /*版本信息*/

printf("\t\t\t 學生成績管理系統1.0 \n");

printf("\t\t\t****************************\n");

printf("\t\t\t 製作人:張春覃 \n");

printf("\t\t\t 指導老師:楊宇晶 於宏偉 \n");

printf("\t\t\t 製作時間:2005年9月 \n");

printf("\t\t\t****************************\n");

printf("\t\t\t請按任意鍵繼續...");

/*while(!kbhit());*/

getch(); /*從鍵盤讀取一個字元,但不顯示於屏幕*/

system("cls"); /*調用DOS的清屏函數,TC中可用clrscr代替*/

while(1) /*主菜單*/

{

printf("\n\n\n\n\n");

printf("\t\t\t************************************\n");

printf("\t\t\t**\tF1 --幫助 **\n");

printf("\t\t\t**\tF2 --輸入數據並存入文件 **\n");

printf("\t\t\t**\tF3 --根據學號查詢成績 **\n");

printf("\t\t\t**\tF4 --根據姓名查詢成績 **\n");

printf("\t\t\t**\tF5 --輸出文件內容 **\n");

printf("\t\t\t**\tF6 --統計及格和優秀人數 **\n");

printf("\t\t\t**\tESC--退出系統 **\n");

printf("\t\t\t************************************\n");

printf("\n\t\t\t請輸入選項\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\t輸入錯誤選項!");

printf("\t\t\t按任意鍵返回...");

getch();*/

}

clrscr(); /*每執行完一項功能後,自動清屏*/

}

}

H. 學生成績管理程序

別忘了給分!
/**********************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define N 3 /*學生人數*/
#define M 3 /*課程門數*/

void input();
void display();
void select();
void statistics();
void dataSave();
void dataLoad();
void menu();

float courses[N][M];
FILE *fp;

void input() /*輸入成績*/
{
int i=0;
int j=0;
for(i=0;i<N;i++)
{
printf("學生%d號\n",i+1);
for(j=0;j<M;j++)
{
printf("第%d門成績的分數為:",j+1);
scanf("%f",&courses[i][j]);
}
printf("\n\n");
}
printf("\n\n");
printf("輸入完畢!按任意鍵返回主菜單!");
getch();
}

void display()
{
int i=0;
int j=0;
for(i=0;i<N;i++)
{
printf("學生%d號的成績分別為:",i+1);
for(j=0;j<M;j++)
printf("%0.2f ",courses[i][j]);
printf("\n");
}
printf("\n按任意鍵返回主菜單!");
getch();
}

void select(int no)
{
int i=0;
printf("您選擇了查看學生%d號的成績:",no);
for(i=0;i<M;i++)
{
printf("%0.2f ",courses[no-1][i]);
}
printf("\n按任意鍵返回主菜單!");
getch();
}

void statistics() /*統計*/
{
float cAverage[M]; /*每門課程平均分*/
float sAverage[N]; /*每個學生平均分*/
float temp=0;
int i=0;
int j=0;
/*算平均分*/
printf("單科課程平均分為:"); /*單科課程平均分*/
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
temp=temp+courses[j][i];
}
cAverage[i]=temp/M;
printf("%0.2f\t",cAverage[i]);
temp=0;
}
temp=0;
printf("\n學生成績平均分為:");
for(j=0;j<N;j++) /*學生成績平均分*/
{
for(i=0;i<M;i++)
{
temp=temp+courses[j][i];
}
sAverage[j]=temp/N;
printf("%0.2f\t",sAverage[j]);
temp=0;
}

/*排序(冒泡法)*/
for(i=0;i<M;i++)
for(j=0;j<M-i-1;j++)
if(cAverage[j]<cAverage[j+1])
{
temp=cAverage[j];
cAverage[j]=cAverage[j+1];
cAverage[j+1]=temp;
}
for(j=0;j<N;j++)
for(i=0;i<N-j-1;i++)
if(sAverage[i]<sAverage[i+1])
{
temp=sAverage[i];
sAverage[i]=sAverage[i+1];
sAverage[i+1]=temp;
}
printf("\n單科課程的前三名:");
for(i=0;i<3;i++)
{
printf("\n第%d名:%0.2f",i+1,cAverage[i]);
}
printf("\n學生總成績前三名:");
for(i=0;i<3;i++)
{
printf("\n第%d名:%0.2f",i+1,sAverage[i]);
}
printf("\n\n按任意鍵返回主菜單!");
getch();
}

void menu()
{
int num=0;
int n=0;
printf("\n\t\t\t學生成績管理系統\n\n");
printf("\t\t\t1.輸入學生成績\n\t\t\t2.顯示所有數據\n\t\t\t3.按學號查詢\n\t\t\t4.統計\n\t\t\t5.退出\n");
printf("\t\t\tchoose:");
scanf("%d",&num);
switch(num)
{
case 1:
system("cls");
input();
break;
case 2:
system("cls");
display();
break;
case 3:
system("cls");
printf("請輸入要查詢的學生號:");
scanf("%d",&n);
select(n);
break;
case 4:
system("cls");
statistics();
break;
case 5:
dataSave();
exit(1);
default:break;
}
}

void dataLoad() /*讀入文件*/
{
int i=0;
fp=fopen("record.txt","r+"); /*存在原文件*/
if(fp!=NULL) /*到文件尾返回*/
for(i=0;i<N&&!feof(fp);i++)
fread(&courses[i],sizeof(courses),1,fp);
else fp=fopen("record.txt","w"); /*不存在則新建一個文件*/
}

void dataSave() /*文件保存*/
{
int i;
fp=fopen("record.txt","w");
for(i=0;i<N;i++)
if(fwrite(&courses[i],sizeof(courses),1,fp)!=1)
{
fclose(fp); /*關閉文件指針*/
printf("file write error\n");
getch();
}
}

void main()
{
int i=0;
int j=0;
dataLoad();
while(1)
{
system("cls"); /*清屏*/
menu();
}
}

/*********************************************************/

I. 題目:學生成績管理系統

功能 能夠實現輸入記錄、查詢記錄、更新記錄、統計記錄、輸出記錄等功能。
1. 輸入記錄。對每個學生的學號、姓名、班級、數學、英語、計算機成績進行輸入並存儲,在程序的運行過程中,數據的存儲可以採用結構體數組或者鏈表,但是最終應該存儲在文件中。
2. 維護記錄。能夠實現添加、刪除、修改學生記錄,但是一定要將最終數據存儲到文件中。
3. 查詢記錄。根據班級、學號、科目等查詢學生的成績。如果查詢時學生數據並沒有讀入到結構體數組或者鏈表中,則應該先從文件中讀出數據並存儲在結構體數組或者鏈表中,然後在結構體數組或者鏈表中查詢滿足條件的數據。
4. 統計記錄。完成對各門功課最高分和不及格人數的統計。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)

typedef struct student
{
int num;
char name[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;

Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
void print(Student *head);
Student *sort_all(Student *head);
void find(Student *head);
Student *add_new(Student *head);

Student *cin()
{
int flag;
Student *head,*p1,*p2;
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n請輸入第%d名學生的學號,學號為0表示結束輸入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
p1->num=flag;
printf("請輸入第%d名學生的姓名:",n);
scanf("%s",p1->name);
printf("請輸入第%d名學生的語文成績:",n);
scanf("%d",&p1->score[0]);
printf("請輸入第%d名學生的數學成績:",n);
scanf("%d",&p1->score[1]);
printf("請輸入第%d名學生的英語成績:",n);
scanf("%d",&p1->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n請輸入第%d名學生的學號,沒有此學生則輸入0表示結束:",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
return head;
}

Student *sort_all(Student *head)
{
int choose;
for(;;)
{
printf("\n\t\t# # # # # 學生成績統計排序 # # # #\n");
printf("\t\t#\t1.按學生學號排序\t #\n");
printf("\t\t#\t2.按學生總分排序\t #\n");
printf("\t\t#\t3.按學生語文成績排序\t #\n");
printf("\t\t#\t4.按學生數學成績排序\t #\n");
printf("\t\t#\t5.按學生英語成績排序\t #\n");
printf("\t\t#\t6.按學生計算機成績排序\t #\n");
printf("\t\t#\t7.單科高分及均分\t #\n");
printf("\t\t#\t8.顯示當前學生成績\t #\n");
printf("\t\t#\t0.返回上一級菜單\t #\n");
printf("\t\t# # # # # 由himpo友情提供# # # # #\n\n");
printf("請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose);break;
case 7:print(head);sort_2(head);break;
case 8:print(head);break;
case 0:return head;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}

Student *sort_1(Student *head,int choose)
{
Student *p1,*p2=head->next,*pm,*px;
Student mid;
if (!p2) return head;
for(p1=p2;p1->next!=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2;break;
case 2:if (pm->sum<p2->sum) pm=p2;break;
case 3:if (pm->score[0]<p2->score[0]) pm=p2;break;
case 4:if (pm->score[1]<p2->score[1]) pm=p2;break;
case 5:if (pm->score[2]<p2->score[2]) pm=p2;break;
case 6:if (pm->score[3]<p2->score[3]) pm=p2;break;
}
if (pm!=p1)
{
mid=*pm;
*pm=*p1;
*p1=mid;
px=pm->next;
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序後的成績表為:\n");
print(head);
return head;
}

void sort_2(Student *head)
{
Student *p=head->next;
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0;
float aver_1,aver_2,aver_3,aver_4,aver_sum;
if (!p) return;
max_1=min_1=p->score[0];max_2=min_2=p->score[1];
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
else if (min_1>p->score[0]) min_1=p->score[0];
if (max_2<p->score[1]) max_2=p->score[1];
else if (min_2>p->score[1]) min_2=p->score[1];
if (max_3<p->score[2]) max_3=p->score[2];
else if (min_3>p->score[2]) min_3=p->score[2];
if (max_4<p->score[3]) max_4=p->score[3];
else if (min_4>p->score[3]) min_4=p->score[3];
if (max_sum<p->sum) max_sum=p->sum;
else if (min_sum>p->sum) min_sum=p->sum;
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
}
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;
aver_sum=aver_1+aver_2+aver_3+aver_4;
printf("總共%d名學生,具體數據為:\n",n);
printf("語文最高分為%d,最低分為%d,平均分為%.2f\n",max_1,min_1,aver_1);
printf("數學最高分為%d,最低分為%d,平均分為%.2f\n",max_2,min_2,aver_2);
printf("英語最高分為%d,最低分為%d,平均分為%.2f\n",max_3,min_3,aver_3);
printf("計算機最高分為%d,最低分為%d,平均分為%.2f\n",max_4,min_4,aver_4);
printf("總分最高分為%d,最低分位%d,平均分為%.2f\n",
max_sum,min_sum,aver_sum);
}

void find(Student *head)
{
Student *p;
int choose,fnum;
char tem[20];
if (n==0)
for(;;)
{
printf("\n請輸入您要查詢學生的方式:\n\n");
printf("1、按學號查詢;2、按姓名查詢;0、我不查詢了。\n\n");
printf("請選擇:");
scanf("%d",&choose);
while(getchar()!='\n');
if (choose==1)
{
printf("\n請輸入你要查詢的學生的學號,輸入0退出學號查詢:");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的學號,請重新輸入,輸入0表示結束:");
scanf("%d",&fnum);
}
else if (p->num==fnum)
{
printf("\n學號為%d學生的數據為:\n",p->num);
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機\
成績 總分\n");
printf("%d\t%s\t %d %d %d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n請輸入你還要查詢的學生的學號,輸入0表示不按學\
號查詢了:");
scanf("%d",&fnum);
}
}
}
else if (choose==2)
{
printf("\n請輸入你要查詢的學生的姓名,輸入0退出姓名查詢:");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的姓名,請重新輸入,輸入0表\
示結束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
{
printf("\n姓名為%s學生的數據為:\n",p->name);
printf("學號\t姓名\t語文成績 數學成績 英語成績 \
計算機成績 總分\n");
printf("%d\t%s\t %d %d %d \
%d %d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum);
printf("\n\n請輸入你還要查詢的學生的姓名,輸入0表\
示不按姓名查詢了:");
scanf("%s",tem);
}
}
}
else if (choose==0)
else
}
}

Student *add_new(Student *head)
{
Student *p;
int flag;
printf("\n\n請輸入你要新加入學生的學號,學號為0表示結束輸入:");
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
p=(Student *)malloc(LEN);
p->num=flag;
printf("請輸入新加入學生的姓名:",n);
scanf("%s",p->name);
printf("請輸入新加入學生的語文成績:",n);
scanf("%d",&p->score[0]);
printf("請輸入新加入學生的數學成績:",n);
scanf("%d",&p->score[1]);
printf("請輸入新加入學生的英語成績:",n);
scanf("%d",&p->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n請輸入還要加入學生的學號,沒有此學生則輸入0表示結束:");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入後的成績表為:\n");
print(head);
return head;
}

void print(Student *head)
{
Student *p=head->next;
if (!p)
printf("此系統目前共計學生%d名:\n",n);
printf("**************************學生成績統計一覽************************\
*****\n");
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機成績 總分\n");
for(;p;p=p->next)
printf("%d\t%s\t %d %d %d %d %d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************此軟體由himpo友情提供*************************\
*\n\n");
}

int main()
{
Student *head;
int choose,i;
head=(Student *)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t* * * * * 學生成績管理系統 * * * *\n");
printf("\t\t*\t1.學生數據鍵盤錄入\t *\n");
printf("\t\t*\t2.學生數據統計排序\t *\n");
printf("\t\t*\t3.查詢學生數據\t\t *\n");
printf("\t\t*\t4.插入學生數據\t\t *\n");
printf("\t\t*\t5.顯示當前成績表\t *\n");
printf("\t\t*\t0.退出成績管理系統\t *\n");
printf("\t\t* * * * * 由himpo友情提供* * * * *\n\n");
printf("\n請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****");
printf("\n\n 此選項將會建立新的學生數據系統 ,原來的數據將\
不再存在,你確信要刪除原來的數據並建立新的數據系統么?\n\n");
printf("1、建立新的數據系統;0、放棄建立新的數據系統。\n\n");
printf("請選擇:");
scanf("%d",&i);
if (i==1)
else if (i==0)
{
printf("\n你選擇了放棄建立新的數據系統!\n");
break;
}
else {
printf("\n你做出別的選擇,當作放棄建立!\n");
break;
}
case 2:head=sort_all(head);break;
case 3:find(head);break;
case 4:head=add_new(head);
case 5:print(head);break;
case 0:system("pause");return 0;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}

J. C語言學生成績管理程序

#include"stdio.h"

/*定義學生結構體*/

structStudent

{

charID[20];

charName[20];

floatMark1;

floatMark2;

floatMark3;

floatAverage;

};

/*聲明學生數組及學生數量*/

structStudentstudents[1000];

intnum=0;

/*求平均值*/

floatAvg(structStudentstu)

{

return(stu.Mark1+stu.Mark2+stu.Mark3)/3;

}

/*通過學號返回數組下標*/

intStudent_SearchByIndex(charid[])

{

inti;

for(i=0;i<num;i++)

{

if(strcmp(students[i].ID,id)==0)

{

returni;

}

}

return-1;

}

/*通過姓名返回數組下標*/

intStudent_SearchByName(charname[])

{

inti;

for(i=0;i<num;i++)

{

if(strcmp(students[i].Name,name)==0)

{

returni;

}

}

return-1;

}

/*顯示單條學生記錄*/

voidStudent_DisplaySingle(intindex)

{

printf("%10s%10s%8s%8s%8s%10s ","學號","姓名","成績","成績","成績","平均成績");

printf("------------------------------------------------------------- ");

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[index].ID,students[index].Name,

students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);

}

/*插入學生信息*/

voidStudent_Insert()

{

while(1)

{

printf("請輸入學號:");

scanf("%s",&students[num].ID);

getchar();

printf("請輸入姓名:");

scanf("%s",&students[num].Name);

getchar();

printf("請輸入成績:");

scanf("%f",&students[num].Mark1);

getchar();

printf("請輸入成績:");

scanf("%f",&students[num].Mark2);

getchar();

printf("請輸入成績:");

scanf("%f",&students[num].Mark3);

getchar();

students[num].Average=Avg(students[num]);

num++;

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}

/*修改學生信息*/

voidStudent_Modify()

{

floatmark1,mark2,mark3;

while(1)

{

charid[20];

intindex;

printf("請輸入要修改的學生的學號:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要修改的學生信息為: ");

Student_DisplaySingle(index);

printf("--請輸入新值-- ");

printf("請輸入學號:");

scanf("%s",&students[index].ID);

getchar();

printf("請輸入姓名:");

scanf("%s",&students[index].Name);

getchar();

printf("請輸入成績:");

scanf("%f",&students[index].Mark1);

getchar();

printf("請輸入成績:");

scanf("%f",&students[index].Mark2);

getchar();

printf("請輸入成績:");

scanf("%f",&students[index].Mark3);

getchar();

students[index].Average=Avg(students[index]);

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}

/*刪除學生信息*/

voidStudent_Delete()

{

inti;

while(1)

{

charid[20];

intindex;

printf("請輸入要刪除的學生的學號:");

scanf("%s",&id);

getchar();

index=Student_SearchByIndex(id);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要刪除的學生信息為: ");

Student_DisplaySingle(index);

printf("是否真的要刪除?(y/n)");

if(getchar()=='y')

{

for(i=index;i<num-1;i++)

{

students[i]=students[i+1];

}

num--;

}

getchar();

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}

/*按姓名查詢*/

voidStudent_Select()

{

while(1)

{

charname[20];

intindex;

printf("請輸入要查詢的學生的姓名:");

scanf("%s",&name);

getchar();

index=Student_SearchByName(name);

if(index==-1)

{

printf("學生不存在! ");

}

else

{

printf("你要查詢的學生信息為: ");

Student_DisplaySingle(index);

}

printf("是否繼續?(y/n)");

if(getchar()=='n')

{

break;

}

}

}

/*按平均值排序*/

voidStudent_SortByAverage()

{

inti,j;

structStudenttmp;

for(i=0;i<num;i++)

{

for(j=1;j<num-i;j++)

{

if(students[j-1].Average<students[j].Average)

{

tmp=students[j-1];

students[j-1]=students[j];

students[j]=tmp;

}

}

}

}

/*顯示學生信息*/

voidStudent_Display()

{

inti;

printf("%10s%10s%8s%8s%8s%10s ","學號","姓名","成績","成績","成績","平均成績");

printf("------------------------------------------------------------- ");

for(i=0;i<num;i++)

{

printf("%10s%10s%8.2f%8.2f%8.2f%10.2f ",students[i].ID,students[i].Name,

students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);

}

}

/*將學生信息從文件讀出*/

voidIO_ReadInfo()

{

FILE*fp;

inti;

if((fp=fopen("Database.txt","rb"))==NULL)

{

printf("不能打開文件! ");

return;

}

if(fread(&num,sizeof(int),1,fp)!=1)

{

num=-1;

}

else

{

for(i=0;i<num;i++)

{

fread(&students[i],sizeof(structStudent),1,fp);

}

}

fclose(fp);

}

/*將學生信息寫入文件*/

voidIO_WriteInfo()

{

FILE*fp;

inti;

if((fp=fopen("Database.txt","wb"))==NULL)

{

printf("不能打開文件! ");

return;

}

if(fwrite(&num,sizeof(int),1,fp)!=1)

{

printf("寫入文件錯誤! ");

}

for(i=0;i<num;i++)

{

if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1)

{

printf("寫入文件錯誤! ");

}

}

fclose(fp);

}

/*主程序*/

main()

{

intchoice;

IO_ReadInfo();

while(1)

{

/*主菜單*/

printf(" ------學生成績管理系統------ ");

printf("1.增加學生記錄 ");

printf("2.修改學生記錄 ");

printf("3.刪除學生記錄 ");

printf("4.按姓名查詢學生記錄 ");

printf("5.按平均成績排序 ");

printf("6.退出 ");

printf("請選擇(1-6):");

scanf("%d",&choice);

getchar();

switch(choice)

{

case1:

Student_Insert();

break;

case2:

Student_Modify();

break;

case3:

Student_Delete();

break;

case4:

Student_Select();

break;

case5:

Student_SortByAverage();

Student_Display();

break;

case6:

exit();

break;

}

IO_WriteInfo();

}

}

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919