簡單的學生成績管理系統#ifndef H_STUDENT_HH/*xxx如果沒有定義xxx*/
#define H_STUDENT_HH/*xxx定義xx*/
#include "stdio.h"
#include "string.h"
#include "malloc.h"
#define LEN sizeof(struct message_student)/*一個結構體數組元素的長度*/
#define numsubs 5/*學科數目*/
typedef struct message_student/*結構體定義*/
{
char number[6];
char name[20];
char sex[4];
float subject[numsubs];
float score;
float average;
int index;
}student;
extern int numstus;/*學生數目*/
extern student *pointer;/*指向結構體數組*/
extern int lens;
int menu_select();/*函數聲明*/
int openfile(student stu[]);
int findrecord(student stud[]);
int writetotext(student stud[]);
void welcome();
void display1();
void showtable();
void sort(student stu[]);
void deleterecord(student stu[],int i);
void addrecord(student stud[]);
void display(student stud[],int n1,int n2);
void amendrecord(student stud[]);
void count(student stud[]);
void sortnum(student stud[]);
void sortnum2(student stud[]);
void sortname(student stud[]);
void sortname2(student stud[]);
void sortcount(student stud[]);
void sortcount2(student stud[]);
void statistic(student stud[]);
void display1();
#endif
#include "stdio.h"
int menu_select()
{
char c;
printf("\n\n");
printf("| 1. 增加學生記錄5.統計信息 |\n");
printf("| 2. 查詢學生記錄6.打開文件 |\n");
printf("| 3. 修改學生記錄7.保存文件 |\n");
printf("| 4. 學生紀錄排序8.顯示記錄 |\n");
printf("|0.退出系統 |\n");
printf("\n\n");
printf("請選擇(0-8):");
c=getchar();
getchar();
return (c-'0');
}
#include "stdio.h"
int findrecord(student stud[])/*查找信息*/
{
char str[2];
int i,num;
if(numstus==0)
{
printf("沒有可被查找的記錄\n");
return -1;
}
else
{
printf("以何種方式查找?\n1.學號\t2.姓名\t3.名次\n");
gets(str);
if(str[0]=='1')/*按學號查找*/
{
printf("請輸入學號:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].number)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='2')/*按姓名查找*/
{
printf("請輸入姓名:");
gets(str);
for(i=0;i<=numstus;i++)
if(strcmp(str,stud[i].name)==0)
{
display(stud,i,i);
break;
}
else continue;
}
else if(str[0]=='3')/*按名次查找*/
{
printf("請輸入名次:");
scanf("%d",&num);
getchar();
for(i=0;i<=numstus;i++)
if(num==stud[i].index)
{
display(stud,i,i);
break;
}
else continue;
}
if(i>numstus)
{
printf("沒有查找所要的信息 。\n");
return -1;
}
return i;
}
}
#include"stdio.h"
int openfile(student stu[])
{
int i=0,j;
FILE *fp;
char filename[20],str[2];
if(numstus!=0)
{
printf("已經有記錄存在,是否保存?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(stu);
}
printf("請輸入文件名:");
gets(filename);
numstus=0;
if((fp=fopen(filename,"rb+"))==NULL)
{
printf("無法打開該文件\n");
return(-1);
}
fscanf(fp,"%d",&numstus);
fgetc(fp);
while(i<numstus)
{
fscanf(fp,"%s",stu[i].number);
fscanf(fp,"%s",stu[i].name);
fscanf(fp,"%s",stu[i].sex);
for(j=0;j<numsubs;j++)
fscanf(fp,"%f",&stu[i].subject[j]);
fscanf(fp,"%f",&stu[i].score);
fscanf(fp,"%f",&stu[i].average);
fscanf(fp,"%d",&stu[i].index);
i++;
}
fclose(fp);
printf("文件讀取成功\n");
printf("是否顯示紀錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
display(stu,0,numstus-1);
return(0);
}
#include "stdio.h"
void sort(student stud[])
{
int i,j=0;
char str[5];
student *p;
p=stud;
if(numstus==0)
{
printf("沒有可供查詢的記錄!");
}
while(1)
{
for(i=0;;i++)
{
printf(" 請輸入查詢方式:");
printf("(直接輸入回車則結束查詢操作)\n");
printf("1.按照學號\t");
printf("2.按照姓名\t");
printf("3.按照名次\n");
gets(str);
if(strlen(str)==0) break;
if(str[0]=='1')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortnum2(p);
else
sortnum(p);
display(stud,0,numstus-1);
}
else if(str[0]=='2')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortname2(p);
else
sortname(p);
display(stud,0,numstus-1);
}
else if(str[0]=='3')
{
printf("請輸入排序次序:\n");
printf("1.升序排列\t");
printf("2.降序排列\n");
gets(str);
if(str[0]=='1')
sortcount2(p);
else
sortcount(p);
display(stud,0,numstus-1);
}
else printf("請輸入1~3");
printf("是否退出排序?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') break;
}
return;
}
}
void sortnum(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].number,stud[j].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortnum2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].number,stud[j+1].number)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j+1].name,stud[j].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortname2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(strcmp(stud[j].name,stud[j+1].name)>0)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j+1].index>stud[j].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
void sortcount2(student stud[])
{
int i,j;
student temp;
student *p;
p=stud;
for(i=0;i<numstus;i++)
for(j=0;j<numstus-i-1;j++)
{
if(stud[j].index>stud[j+1].index)
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
#include"stdio.h"
void statistic(student stud[])/*新增功能,輸出統計信息*/
{
int i,j=0,k=0;
char c1,str[2];
float average[numsubs],sum=0;
if(numstus==0)
printf("沒有可被查找的記錄\n");
else
{
while(1)
{
printf("下面將統計考試成績\n");
printf("請選擇你要統計哪科的成績1.A\t2.B\t3.C\t4.D\t5.E\n");
c1=getchar();
printf("\t一共有個%d記錄\n",numstus);/*總共記錄數*/
switch(c1)
{
case '1':
for(i=0;i<numstus;i++)/*循環輸入判斷*/
{
sum+=stud[i].subject[0];
if(stud[k].subject[0]>stud[i].subject[0]) k=i;
if(stud[j].subject[0]<stud[i].subject[0]) j=i;
}
average[0]=sum/numstus;
printf("\t科目A的最高分:\n");/*最高分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[0]);
printf("\t科目A的最低分是:\n");/*最低分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[0]);
printf("\t科目A的平均分是 %5.2f\n",average[0]);/*平均分*/
break;
case '2':
for(i=0;i<numstus;i++)/*循環輸入判斷*/
{
sum+=stud[i].subject[1];
if(stud[k].subject[1]>stud[i].subject[1]) k=i;
if(stud[j].subject[1]<stud[i].subject[1]) j=i;
}
average[1]=sum/numstus;
printf("\t科目B的最高分:\n");/*最高分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[1]);
printf("\t科目B的最低分是:\n");/*最低分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[1]);
printf("\t科目B的平均分是 %5.2f\n",average[1]);/*平均分*/
break;
case '3':
for(i=0;i<numstus;i++)/*循環輸入判斷*/
{
sum+=stud[i].subject[2];
if(stud[k].subject[2]>stud[i].subject[2]) k=i;
if(stud[j].subject[2]<stud[i].subject[2]) j=i;
}
average[2]=sum/numstus;
printf("\t科目C的最高分:\n");/*最高分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[2]);
printf("\t科目C的最低分是:\n");/*最低分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[2]);
printf("\t科目C的平均分是 %5.2f\n",average[2]);/*平均分*/
break;
case '4':
for(i=0;i<numstus;i++)/*循環輸入判斷*/
{
sum+=stud[i].subject[3];
if(stud[k].subject[3]>stud[i].subject[3]) k=i;
if(stud[j].subject[3]<stud[i].subject[3]) j=i;
}
average[3]=sum/numstus;
printf("\t科目D的最高分:\n");/*最高分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[3]);
printf("\t科目D的最低分是:\n");/*最低分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[3]);
printf("\t科目D的平均分是 %5.2f\n",average[3]);/*平均分*/
break;
case '5':
for(i=0;i<numstus;i++)/*循環輸入判斷*/
{
sum+=stud[i].subject[4];
if(stud[k].subject[4]>stud[i].subject[4]) k=i;
if(stud[j].subject[4]<stud[i].subject[4]) j=i;
}
average[4]=sum/numstus;
printf("\t科目E的最高分:\n");/*最高分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[j].number,stud[j].name,stud[j].subject[4]);
printf("\t科目E的最低分是:\n");/*最低分*/
printf("\t\t學號:%s姓名:%s分數:%.2f\n",stud[k].number,stud[k].name,stud[k].subject[4]);
printf("\t科目E的平均分是 %5.2f\n",average[4]);/*平均分*/
break;
default:printf("輸入錯誤!請輸入1~5之間的數\n");
}
sum=0;
getchar();
printf("是否繼續進行統計?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y') ;
else break;
}
}
}
#include"stdio.h"
int writetotext(student stud[])/*將所有記錄寫入文件*/
{
int i=0,j;
FILE *fp;
char filename[20];
printf("輸入文件名稱:");
gets(filename);
fp=fopen(filename,"w");
fprintf(fp,"%d\n",numstus);
while(i<numstus)
{
fprintf(fp,"%s %s %s ",stud[i].number,stud[i].name,stud[i].sex);
for(j=0;j<numsubs;j++)
fprintf(fp,"%f ",stud[i].subject[j]);
fprintf(fp,"%f %f %d ",stud[i].score,stud[i].average,stud[i].index);
i++;
}
fclose(fp);
printf("已成功存儲!\n");
display(stud,0,numstus-1);
numstus=0;
return 0;
}
#include"stdio.h"
void welcome()
{
printf("\t*************************************************************\n");
printf("\t\t\t\t歡迎進入學生成績管理系統\t\t\t\t\t\t\t\t曉 歡迎使用!\n");
printf("\t*************************************************************\n");
printf("\t\t\t\t\t\t本系統由“曉”一組親情制作\n\n");
printf("\t\t\t\t\t\t制作人員列表: \n");
printf("\t\t\t\t\t\t吳彥兵 黃進 汪紅波\n\t\t\t\t\t\t劉玉蕭 楊超 章耀\n");
printf("輸入回車進入菜單欄:\n");
printf("\n\n");
getchar();
}
void showtable()
{
printf("-------------------------------------------------------------------------------\n");
printf("學號\t姓名\t性別\tA\tB\tC\tD\tE總分 平均分 名次\n");
printf("-------------------------------------------------------------------------------\n");
}
void display(student stud[],int n1,int n2)
{
int i;
showtable();/*顯示表頭*/
for(i=n1;i<=n2;i++)
printf("%s\t%s\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%.1f%.1f %.1f%d\t\n",stud[i].number,stud[i].name,stud[i].sex,stud[i].subject[0],stud[i].subject[1],stud[i].subject[2],stud[i].subject[3],stud[i].subject[4],stud[i].score,stud[i].average,stud[i].index);
/*通過循環輸出數據*/
}
void display1()
{
printf("\t\t本系統由曉一組親情制作\n\n");
printf("\t\t制作人員列表:\n");
printf("\t\t\t\t\t\t吳彥兵 黃進 汪紅波\n\t\t\t\t\t\t劉玉蕭 楊超 章耀\n");
printf("\t\t\t=========歡迎下次使用=========");
printf("\n\n");
getchar();
}
#include"stdio.h"
#include
void amendrecord(student stud[])
{
char str[5];/*供用戶輸入*/
int i=-1,j;
if(numstus==0)/*沒有記錄返回*/
printf("沒有可供修改的記錄!");
while(i<0)
{
i=findrecord(stud);
if(i>=0)
{
printf("要刪除這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
deleterecord(stud,i);
count(stud);
}
else
{
printf("確定要修改這個學生的信息嗎?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
{
printf("下面請重新輸入學生的信息:\n");
printf("請輸入學號:");
gets(stud[i].number);
printf("請輸入姓名:");
gets(stud[i].name);
printf("請輸入性別(男/女1/0):");
gets(str);
if(str[0]=='0')
strcpy(stud[i].sex,"女");
else
strcpy(stud[i].sex,"男");
stud[i].score=0;
printf("請按順序輸入成績:");
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);
stud[i].score+=stud[i].subject[j];
}
getchar();
stud[i].average=stud[i].score/numsubs;
}
count(stud);
}
display(stud,0,numstus-1);
}
printf("是否繼續進行其他修改?(y/n)\n");
gets(str);
if(str[0]=='y'||str[0]=='Y')
i=-1;
else i=1;
}
}
void deleterecord(student stu[],int i)/*刪除信息*/
{
int j;
while(i>=0)
{
for(j=i;j<numstus;j++)
stu[j]=stu[j+1];
numstus--;
printf("刪除成功!\n");
}
}
void count(student stud[])
{
int i,j;
for(i=0;i<numstus;i++)
{
stud[i].index=1;
for(j=0;j<numstus;j++)
if(stud[j].score>stud[i].score)
stud[i].index++;
}
}
#include "stdio.h"
void addrecord(student stud[])
{
int i=0,j,num;
char str[5];
if(numstus!=0)
{
printf("已有記錄存在是否覆蓋?(y/n)\n");
gets(str);
if(str[0]=='Y'||str[0]=='y')
i=0;
else i=numstus;
}
printf("請輸入增加的學生信息條目數:");
scanf("%d",&num);
if(i==0)
numstus=num;
else numstus+=num;
if(numstus>lens)
{
lens+=50;
pointer=(student *)realloc(pointer,lens*LEN);
}
printf("請輸入學生信息:\n");
for(;i<numstus;i++)
{
getchar();
printf("請輸入學號:");
gets(pointer[i].number);
printf("請輸入姓名:");
gets(pointer[i].name);
printf("請輸入性別(男/女1/0):");
gets(pointer[i].sex);
if(pointer[i].sex[0]=='0') strcpy(pointer[i].sex,"女");
else strcpy(pointer[i].sex,"男");
printf("請輸入各科成績:(按ABCDE的順序):");
stud[i].score=0;
for(j=0;j<numsubs;j++)
{
scanf("%f",&stud[i].subject[j]);/*計算總分*/
stud[i].score+=stud[i].subject[j];
}
stud[i].average=stud[i].score/numsubs;/*計算平均分*/
}
count(stud);/*附名次*/
display(stud,0,numstus-1);
getchar();
}
#include "stdio.h"
int numstus;
int lens;
student *pointer;
void main()
{
int i=1;
char str[2];
lens=100;
pointer=(student *)malloc(lens*LEN);/*分配內存*/
numstus=0;
welcome();/*歡迎界面*/
while(i>0)
{
i=menu_select();/*控制菜單*/
switch(i)
{
case 1:addrecord(pointer);break;/*增加學生信息*/
case 2:findrecord(pointer);break;/*查詢學生信息*/
case 3:amendrecord(pointer);break;/*修改學生信息*/
case 4:sort(pointer);break;/*學生信息排序*/
case 5:statistic(pointer);break;/*統計信息*/
case 6:openfile(pointer);break;/*打開文件*/
case 7:writetotext(pointer);break;/*保存文件*/
case 8:display(pointer,0,numstus-1);break;/*顯示記錄*/
case 0:
if(numstus!=0) printf("是否保存當前記錄?(y/n)");
gets(str);
if(str[0]=='y'||str[0]=='Y')
writetotext(pointer);
i=-1;break;/*退出系統*/
default:printf("請輸入數字0~8:\n");i=1;/*輸入錯誤*/
}
}
printf("\t\t======歡迎再次使用本系統======= \n");
display1();
}
簡單學生成績管理系統#define N7 /*學生的人數*/
typedef struct
{
char num[5];
char name[10]; /*記錄姓名和學號*/
float math,english,comput,average; /*各個科目及平均分*/
}mark; /*定義學生記錄結構體類型*/
typedef struct
{
float fen[4];
int n;
}fsp;/*定義學生記錄轉化的中間變量*/
void count(mark *s)/*統計各科平均分 各科的最高(低)分及各分數段的人數*/
{
float ave[3]={0};/*存放各科平均分 */
float m[3][2] ;
int num[3][5]={0};/*存放各分數段的人數*/
int i;
m[0][1]=m[0][0]=s->math;
m[1][0]=m[1][1]=s->english;
m[2][0]=m[2][1]=s->comput;
for(i=0;i<N;i++)
{ ave[0]+=(s+i)->math;
ave[1]+=(s+i)->english;
ave[2]+=(s+i)->comput;
if( (s+i)->math > m[0][0] )
m[0][0]=(s+i)->math;
else if( (s+i)->math < m[0][1] )
m[0][1]=(s+i)->math;
if( (s+i)->english > m[1][0] )
m[1][0]=(s+i)->english;
else if( (s+i)->english < m[1][1] )
m[1][1]=(s+i)->english;
if( (s+i)->comput > m[2][0] )
m[2][0]=(s+i)->comput;
else if( (s+i)->comput < m[2][1] )
m[2][1]=(s+i)->comput;
/*統計各科的最高(低)分*/
if((s+i)->math<60.0)
num[0][0]++;
else if((s+i)->math<70.0)
num[0][1]++;
else if((s+i)->math<80.0)
num[0][2]++;
else if((s+i)->math<90.0)
num[0][3]++;
else num[0][4]++;
/*統計數學各分數段的人數*/
if((s+i)->english<60.0)
num[1][0]++;
else if((s+i)->english<70.0)
num[1][1]++;
else if((s+i)->english<80.0)
num[1][2]++;
else if((s+i)->english<90.0)
num[1][3]++;
else num[1][4]++;
/*統計英語各分數段的人數*/
if((s+i)->comput<60.0)
num[2][0]++;
else if((s+i)->comput<70.0)
num[2][1]++;
else if((s+i)->comput<80.0)
num[2][2]++;
else if((s+i)->comput<90.0)
num[2][3]++;
else num[2][4]++;
/*統計計算機各分數段的人數 */
}
for(i=0;i<3;i++)
ave[i]=ave[i]/N;
printf("三門科的平均分分別為:\n%.1f %.1f %.1f\n",ave[0],ave[1],ave[2]);
printf("三門科的最高分與最底分分別為:\n");
printf("%.1f %.1f\n%.1f %.1f\n%.1f %.1f\n",
m[0][0],m[0][1],m[1][0],m[1][1],m[2][0],m[2][1]);
printf("三門科不及格 60-69 70-79 80-89 90分以上的人數分別為:\n");
printf("數學: %3d%5d%6d%6d%4d\n",num[0][0],num[0][1],num[0][2],num[0][3],num[0][4]);
printf("英語: %3d%5d%6d%6d%4d\n",num[1][0],num[1][1],num[1][2],num[1][3],num[1][4]);
printf("計算機:%3d%5d%6d%6d%4d\n",num[2][0],num[2][1],num[2][2],num[2][3],num[2][4]);
}
void found(mark *s)/*輸入學生的學號查詢學生的成績情況*/
{
char a[10];/*接受輸入的學號*/
int flag,i;/*循環變量*/
char * b="exit";
do
{ flag=0;
printf("請輸入所要查詢的學生的學號或姓名\n");
getchar();
gets(a);
for(i=0;i<N;i++)
{printf("該生的學號,姓名,各門課程及平均成績為:\n%s %s %.1f %.1f %.1f %.1f\n"
,(s+i)->num,(s+i)->name,(s+i)->math,(s+i)->english,(s+i)->comput,(s+i)->average);/*成績打印*/
flag=1;}
if(flag==0) printf("查無此人\n");
}while(strcmp(a,b));
printf("查詢結束");
}
main()
{
mark *s,*a,*b,*c,*d;
fsp *p;
s=(mark*)malloc(N*sizeof(mark));
a=(mark*)malloc(N*sizeof(mark));
b=(mark*)malloc(N*sizeof(mark));
c=(mark*)malloc(N*sizeof(mark));
d=(mark*)malloc(N*sizeof(mark));
p=(fsp*)malloc(N*sizeof(fsp));/*各變量空間開辟 */
printf("初始化學生的記錄為:\n");
printf("按數學成績排序學生的記錄為:\n");
printf("按英語成績排序學生的記錄為:\n");
printf("按計算機成績排序學生的記錄為:\n");
printf("按平均成績排序學生的記錄為:\n");
count(s);
found(s);
}
簡單的學生成績管理系統的設計【學生成績管理系統】#include "stdio.h" #include "stdlib.h" #include "string.h" int shoudsave=0; /* */ struct student {char num[10];/* 學號 */char name[20];char sex[10];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=https://www.zaoxu.com/jjsh/bkdq/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); } int 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; } } system("pause");return 0;}
求~設計簡單的學生成績管理系統找到后,最好還是根據自己的需求進行修改,
網上這樣的程序很多的,也是很多人做出來的,
大家拿出來共享,最好自己也做一做,^_^
呵呵,希望能有幫助,^_^
關于簡單的學生成績管理系統問題學生成績管理系統 代碼
#include "stdio.h"/*I/O函數*/
#include "stdlib.h"/*其它說明*/
#include "string.h"/*字符串函數*/
#include "conio.h"/*屏幕操作函數*/
#include "mem.h"/*內存操作函數*/
#include "ctype.h"/*字符操作函數*/
#include "alloc.h"/*動態地址分配函數*/
struct score
{
int mingci;
char xuehao[8];
char mingzi[20];
float score[6];
}data,info[1000];
int i,j,k=0;
char temp[20],ch;
FILE *fp,*fp1;
void shuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPlease shuru xuehao:");
gets(data.xuehao);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please shuru wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please shur huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
fwrite(&data,sizeof(data),1,fp);
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
} fclose(fp);
}
void xianshi()
{
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL)
{
printf("Cannot reading this file.\n");
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!=1)
break;
}
printf("\nxuehaomingziyuwenshuxueyingyuwulihuauxue zhongfen\n");
for(j=0,k=1;j<i;j++,k++)
{
info[j].mingci=k;
printf("%6s %8s%3.1f%3.1f%3.1f%3.1f%3.1f%3.1f\n",info[j].xuehao,info[j].mingzi,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3],info[j].score[4],
info[j].score[5]);
}
getch();
fclose(fp);
}
void xiugai()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("Cannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xiugai xuehao:");
scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("xuehao:%s\nmingzi:%s\n",data.xuehao,data.mingzi);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please input wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please input huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
} fwrite(&data,sizeof(data),1,fp1);
}
fseek(fp,0L,0);
fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1)
{
fwrite(&data,sizeof(data),1,fp);
}
fclose(fp);
fclose(fp1);
}
void chazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xuehao chakan:");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:%smingzi:%s\nyuwen:%f\n shuxue:%f\n yingyu:%f\n wuli:%f\n huaxue:%f\n ",data.xuehao,data.mingzi,data.score[0],data.score[1],data.score[2],data.score[3],data.score[4],data.score[5]);
}getch();
}
}
void shanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopen score.txt was failed!");
getch();
exit(0);
}
printf("\nPlease input ID which you want to del:");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("Anykey will delet it.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n");
printf("Anykey will return to main.");
getch();
}
main()
{
while(1)
{
clrscr();/*清屏幕*/
gotoxy(1,1);/*移動光標*/
textcolor(YELLOW);/*設置文本顯示顏色為黃色*/
textbackground(BLUE);/*設置背景顏色為藍色*/
window(1,1,99,99);/* 制作顯示菜單的窗口 , 大小根據菜單條數設計*/
clrscr();
printf("*************welcome to use student manage******************\n");
printf("*************************menu********************************\n");
printf("* ========================================================= *\n");
printf("*1>shuru2>xiugai*\n");
printf("*3>shanchu4>chazhao*\n");
printf("*5>xianshi6>exit*\n");
printf("**\n");
printf("* --------------------------------------------------------- *\n");
printf("Please input which you want(1-6):");
ch=getch();
switch(ch)
{
case '1':shuru();break;
case '2':xiugai(); break;
case '3':shanchu();break;
case '4':chazhao(); break;
case '5':xianshi();break;
case '6':exit(0);
default: continue;
}
}
}
用C語言設計一個學生成績管理系統

文章插圖
#include #include #include #define MAX 1000/*定義學生成績信息結構*/struct stu{char id[8];char name[8];擴展資料:short:修飾int,短整型數據,可省略被修飾的int 。(K&R時期引入)long:修飾int,長整型數據 , 可省略被修飾的int 。(K&R時期引入)long long:修飾int,超長整型數據,可省略被修飾的int 。(C99標準新增)signed:修飾整型數據,有符號數據類型 。(C89標準新增)unsigned:修飾整型數據,無符號數據類型 。(K&R時期引入)restrict:用于限定和約束指針,并表明指針是訪問一個數據對象的唯一且初始的方式 。(C99標準新增)復雜類型關鍵字struct:結構體聲明 。(K&R時期引入)union:聯合體聲明 。(K&R時期引入)enum:枚舉聲明 。(C89標準新增)typedef:聲明類型別名 。(K&R時期引入)sizeof:得到特定類型或特定類型變量的大小 。(K&R時期引入)inline:內聯函數用于取代宏定義,會在任何調用它的地方展開 。(C99標準新增)參考資料來源:百度百科-c語言
設計一個簡單的學生成績管理系統,我沒寫,只能和你說說怎么寫 。
可以由類模板和數組寫 。
我說說類模板的吧 。
定義一個Student類存放學生信息(姓名,初始排名,各科成績,個人總分);
初始排名由輸入順序排,在計算名字的時候就可以通過冒泡排序 。
在里面定義計算總分的函數 。
下面定義一個Caozuo類,用學生鏈表的做 。你可以去找下這個例子 。
數組的就很簡單了,你只要想想 。先定義數組(姓名,成績),總分就是個人每科成績的和,下面5個函數都可以通過數組遍歷實現 。如
cout<<"請輸入你要查詢的學生的名字:"<<endl;
cin>>n;
for(int i=0;i<=Maxsize;i++)
{
if(Student[i].name==n)
Student[i].Print();
}
c++設計學生成績管理系統如果你是計算機系的學生真的希望你不要完全復制,做下參考自己編寫出來才能有所收獲,這是對你的將來負責;如果你只是應付一下作業,那就隨便了 。
# include
# include
# include
#include //用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{
public:
char name[20];
char Id[20];
int Cnum;//C課程得分
int Mnum;//數學課程得分
int Enum;//英語課程得分
int sum;//總分
Student * Next;
void Input()
{
cout>name;
cout>Id;
cout>Cnum;
cout>Mnum;
cout>Enum;
sum=Cnum+Mnum+Enum;
}
void ReadFile(istream & in)
{
in>>name>>Id>>Cnum>>Mnum>>Enum>>sum;
}
void Show()
{
cout<<"姓名:"<<name<<endl<<"學號:"<<Id<<endl<<"C++:"<<Cnum<<endl
<<"數學:"<<Mnum<<endl<<"外語:"<<Enum<<endl<<"總成績:"<<sum<<endl<<endl<<endl;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage類﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
public:
Studentmassage();
~Studentmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Student *,Student *);
void Sort();
//void Unpass();
int ListCount();
//void Average();
void Display()
{
for(Student * p=Head->Next;p!=End;p=p->Next)
p->Show();
cout<<"輸入任意字符!繼續……";
getch();
}
void AddItem()
{
End->Input();
End->Next=new Student;
End=End->Next;
cout<<"添加成功!"<<endl;
cout<<"輸入任意字符!繼續……";
getch();
}
private:
Student * Head,* End;
ifstream in;
ofstream out;
Student *FindItem(char * name)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功則返回上一個指針,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Student *FindID(char * Id)
{
for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功則返回上一個指針,不成功就返回空
if(!strcmp(p->Next->Id,Id))return p;
return NULL;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌構造函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
Head=new Student;
Head->Next=new Student;
End=Head->Next;
in.open("sort.txt");
if(!in)
cout<<"這是一個新系統,無學生信息 。請先輸入 。"<<endl;
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Student;
End=End->Next;
}
in.close();
cout<<"\t\t讀取學生信息成功!"<<endl;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析構函數﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
Save();
for(Student * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜單﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓☆學 生 成 績 管 理 系統☆〓〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓
- 高三家長和學生必看 高職是什么
- 游戲筆記本推薦
- 學生筆記本排行
- 如何培養學生的數感
- 小學生需要背的 海角對什么
- 14歲學生女變好看技巧 青春期女學生怎么變漂亮
- 學生白色t恤太透了怎么辦 學生白色t恤太透了怎么搭配
- 學生晚餐食譜大全及做法
- 學生可以喝咖啡嗎
- 學生午餐食譜大全家常菜
