學生課程成績管理系統
A. 學生及成績管理系統
#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#define N 1000
struct student /*學生信息*/
{
char num[20]; /*學號*/
char name[20]; /*姓名*/
char sex; /* 性別,'1'->男, '0'->女*/
short age; /*年齡*/
short score[3]; /*三門課程的成績*/
short sum; /*總成績*/
short deptid; /*所在系的系號*/
struct student *next1;
struct student *next2;
}*head;
struct student std[N];
struct department /*系信息,假設總共有3個系*/
{
short id; /*系號*/
char name[20]; /*系名*/
char dean[20]; /*系主任*/
char location[30]; /*系的辦公地點*/
}depa[3]={{1,"計算機系","張三","電教樓505"},{2,"法政系","李四","電教樓404"},{3,"外語系","王五","實驗樓401"}};
void menu()
{
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");
printf("12. 按成績從高到低顯示所有學生信息[選作題目]\n");
printf("0. 退出系統\n");
}
//錄入學生信息
void create()
{
int i,j;
char tmp[30];
struct student *p;
head=NULL;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否繼續錄入(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====請輸入第%d個學生信息====\n",i);
printf("學號:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性別,('1'->男, '0'->女):");
p->sex=getchar();
getchar();
printf("年齡:");
gets(tmp);
p->age=atoi(tmp);
printf("三門課程的成績:\n");
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d個成績:",j+1);
gets(tmp);
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("總成績:%d\n",p->sum);
printf("所在系的系號[1->計算機系;2->法政系;3->外語系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("信息錄入完畢,按任意鍵繼續……");
getch();
}
//顯示所有學生信息
void displayAll()
{
struct student *p;
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
p=head;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next1;
}
printf("信息顯示完畢,按任意鍵繼續……");
getch();
}
//按學號查詢學生信息
void searchOnNum()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("請輸入學號:");
gets(tmp);
flag=0;
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
while(p!=NULL)
{
if(strcmp(tmp,p->num)==0)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到學號是%s的學生,按任意鍵繼續……",tmp);
else
printf("\n顯示完畢,按任意鍵繼續……");
getch();
}
//按姓名查詢學生信息
void searchOnName()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("請輸入姓名:");
gets(tmp);
flag=0;
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
while(p!=NULL)
{
if(strstr(p->name,tmp))
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意鍵繼續……",tmp);
else
printf("\n顯示完畢,按任意鍵繼續……");
getch();
}
//按年齡查詢學生信息
void searchOnAge()
{
int flag;
char tmp[30];
struct student *p;
p=head;
printf("請輸入年齡:");
gets(tmp);
flag=0;
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
while(p!=NULL)
{
if(atoi(tmp)==p->age)
{
flag=1;
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
}p=p->next1;
}
if(flag==0)
printf("\n未找到年齡是%s的學生,按任意鍵繼續……",tmp);
else
printf("\n顯示完畢,按任意鍵繼續……");
getch();
}
//查詢指定學生的所在系的信息
void searchDepa()
{
int i,flag;
char tmp[30];
struct student *p;
p=head;
printf("請輸入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
for(i=0;i<3;i++)
{
if(p->deptid==depa[i].id)
{
flag=1;
printf("系名\t\t系主任\t\t系的辦公地點\n");
printf("%s\t\t%s\t\t%s\n",depa[i].name,depa[i].dean,depa[i].location);
}
}
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s,或許%s系號輸入時有誤,按任意鍵繼續……",tmp);
else
printf("\n顯示完畢,按任意鍵繼續……");
getch();
}
//修改學生信息
void update()
{
int flag,j;
char tmp[30];
char a;
struct student *p;
p=head;
printf("請輸入姓名:");
gets(tmp);
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
printf("\n====請輸入新信息====\n");
printf("學號:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->num,tmp);
printf("姓名:");
gets(tmp);
if(strcmp(tmp,"")!=0)
strcpy(p->name,tmp);
printf("性別,'1'->男, '0'->女:");
a=getchar();
if(a!='\n')
p->sex=a;
printf("年齡:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->age=atoi(tmp);
printf("三門課程的成績:\n");
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d個成績:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("總成績:%d\n",p->sum);
printf("所在系的系號[1->計算機系;2->法政系;3->外語系]:");
gets(tmp);
if(strcmp(tmp,"")!=0)
p->deptid=atoi(tmp);
}p=p->next1;
}
if(flag==0)
printf("\n未找到%s!按任意鍵繼續……",tmp);
else
printf("\n修改完畢,按任意鍵繼續……");
getch();
}
//刪除學生信息
void delate()
{
int flag;
char tmp[30];
struct student *p,*q;
printf("請輸入姓名:");
gets(tmp);
p=head;
flag=0;
while(p!=NULL)
{
if(strcmp(tmp,p->name)==0)
{
flag=1;
if(p==head)
head=p->next1;
else
q->next1=p->next1;
free(p);break;
}
q=p;
p=p->next1;
}
if(flag==0)
printf("\n未找到%s,按任意鍵繼續……",tmp);
else
printf("刪除完畢,按任意鍵繼續……");
getch();
}
//追加學生信息
void add()
{
int i,j;
char tmp[30];
struct student *p;
for(i=1;;i++)
{
if(i!=1)
{
printf("是否繼續追加(y/n):");
gets(tmp);
if(strcmp(tmp,"n")==0)
break;
}
p=(struct student *)malloc(sizeof(struct student));
printf("\n====請輸入第%d個追加信息====\n",i);
printf("學號:");
gets(p->num);
printf("姓名:");
gets(p->name);
printf("性別,'1'->男, '0'->女:");
p->sex=getchar();
getchar();
printf("年齡:");
gets(tmp);
p->age=atoi(tmp);
p->sum=0;
for(j=0;j<3;j++)
{
printf("第%d個成績:",j+1);
gets(tmp);
if(strcmp(tmp,"")!=0)
p->score[j]=atoi(tmp);
p->sum+=p->score[j];
}
printf("總成績:%d\n",p->sum);
printf("所在系的系號[1->計算機系;2->法政系;3->外語系]:");
gets(tmp);
p->deptid=atoi(tmp);
p->next1=head;
head=p;
}
printf("追加成功,按任意鍵繼續……");
getch();
}
//保存學生信息到文件
void save()
{
FILE *fp;
char filename[20]={"d://qq.dat"};
printf("請輸入文件名如%s:",filename);
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能為空,請重新輸入:");
gets(filename);
}
if((fp=fopen(filename,"wb"))==NULL)
{
printf("write file open error!\n按任意鍵繼續……");getch();
return;
}
struct student *p;
p=head;
printf("正在保存信息,請耐心等待……\n");
while(p!=NULL)
{
fwrite(p,sizeof(struct student),1,fp);
p=p->next1;
}
fclose(fp);
printf("信息保存成功,按任意鍵繼續……");getch();
}
//從文件載入學生信息
void load()
{
char filename[20];
FILE *fp;
printf("請輸入文件名:");
gets(filename);
while(strcmp(filename,"")==0)
{
printf("文件名不能為空,請重新輸入:");
gets(filename);
}
if((fp=fopen(filename,"rb"))==NULL)
{
printf("read file open error!\n按任意鍵繼續……");getch();
return;
}
struct student *p,*q;
p=(struct student *)malloc(sizeof(struct student));
head=p;
printf("正在從磁碟載入信息,請耐心等待……\n");
while(!feof(fp))
{
if(1!=fread(p,sizeof(struct student),1,fp))
break;
p->next1=(struct student *)malloc(sizeof(struct student));
q=p;
p=p->next1;
}
q->next1=NULL;
fclose(fp);
printf("載入成功,按任意鍵繼續……");getch();
}
//按成績從高到低顯示所有學生信息[選作題目]
void displayInOrder()
{
struct student *head1,*p,*q,*r;
p=(struct student *)malloc(sizeof(struct student));
p=head;
while(p!=NULL)
{
if(p==head)
{
head1=p;
p->next2=NULL;
}
else
{
q=head1;
while(1)
{
if(p->sum>q->sum)
{
if(q==head1)
{
p->next2=head1;
head1=p;break;
}
else
{
r->next2=p;
p->next2=q;break;
}
}
else if(q->next2==NULL)
{
q->next2=p;
p->next2=NULL;break;
}
r=q;
q=q->next2;
}
}
p=p->next1;
}
printf("學號\t姓名\t性別\t年齡\t三門課程的成績\t\t總成績\t所在系的系號\n");
p=head1;
while(p!=NULL)
{
printf("%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%d\n",p->num,p->name,p->sex=='1'?"男":"女",p->age,*(p->score),*(p->score+1),*(p->score+2),p->sum,p->deptid);
p=p->next2;
}
printf("信息顯示完畢,按任意鍵繼續……");getch();
}
//退出系統,判斷是否真的退出
void exitSystem()
{
char x;
printf("你真的要退出系統嗎?(Y/N)");
while(1)
{
x=getche();
if(x=='y' || x=='Y' || x=='n' || x=='N' )
break;
printf("\b");
}
if(x=='y' || x=='Y')
{
printf("\n");
exit(0);
}
return;
}
void main()
{
int c;
char choice[3];
while(1)
{
system("cls");
menu();
do
{
printf("請輸入功能鍵:");
gets(choice);
c=atoi(choice);
}while(c>12||c<0);
switch(c)
{
case 1: create();break;
case 2: displayAll();break;
case 3: searchOnNum();break;
case 4: searchOnName();break;
case 5: searchOnAge();break;
case 6: searchDepa();break;
case 7: update();break;
case 8: delate();break;
case 9: add();break;
case 10: save();break;
case 11: load();break;
case 12: displayInOrder();break;
case 0: exitSystem();
}
}
}
B. 學生課程及成績管理系統 英文翻譯 學生課程及成績管理系統 英文翻譯
The system is a student curriculum and performance management system, it is Ecational Management System of a subsystem. Main users are the students, teachers and administrators. System to the students and Investigation Course. Facilitate the management of teaching and student achievement in the time of admission. More importantly, the system facilitates the management of the academic schools. The system uses a three-tier structure of the MVC model, in the process of developing the use of Struts and Hibernate to handle pages logic and object persistence work. The development of the system and did not simply use JSP+Servlet, but with the Struts and Hibernate. This is to make the structure more clearly while simplifying the development work. Curriculum and student performance management systems have greatly reced the human inconvenience for the whole data management more scientific and rational. Of the system are unique background is in the area of database programs and achievements of students in the unified management. The system interface is used Dreamware software, Mysql database background probably divided into the following table : Table administrator, student information tables, the class information table, Information Table curriculum, teachers information table, curriculum and student performance information table.
C. 學生成績管理系統設計
你把有的課程名字改一下,或者添加一些東西,在結構體定義那裡
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
int num;
int wuli;
int huaxue;
int math;
};
FILE *fp;
//添加學生信息,可以排除與已存的沖突;
void add()
{
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("請輸入要添加學生的學號、物理成績、化學成績及數學成績\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(student.num==a)
{
printf("該學生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
}
}
if(n==0)
{
printf("信息庫中沒有該學生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
}
}
//修改學生信息;
void modify()
{
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請輸入要修改學生的學號\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("該學生信息為:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("請輸入要修改的信息\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
//刪除學生信息;
void del()
{
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請輸入刪除學生的學號\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("該學生信息為:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要刪除該學生信息,是:1 ;否:0\n");
scanf("%d",&m);
if(m)
{
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("該學生信息已刪除\n");
}
else printf("您已放棄刪除該學生信息\n");
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
//查找學生信息;
void search()
{
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請選擇查找方式:1--按學號查找;0--按學科查找\n");
scanf("%d",&m);
if(m)
{
printf("請輸入要查找學生的學號\n");
scanf("%d",&number);
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
if(number==a)
{
printf("已找到,該學生信息為:\n");
printf("%s %s %s %s\n","學號","物理成績","化學成績","數學成績");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
else
{
printf("請輸入要查找的學科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
{
printf("學號\t物理成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
}
if(strcmp(s,"huaxue")==0)
{
printf("學號\t化學成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
}
if(strcmp(s,"math")==0)
{
printf("學號\t數學成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
}
if(strcmp(s,"wuli")&&strcmp(s,"huaxue")&&strcmp(s,"math") )
{
printf("錯誤,要查找的學科不存在\n");
fclose(fp);
}
}
}
//統計學生信息;
void tongji()
{
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("0--統計單科平均成績\n");
printf("1--統計單個學生的平均成績和總成績,對學生排名\n");
printf("請選擇統計類型\n");
scanf("%d",&m);
if(!m)
{
printf("1--統計物理的平均成績\n");
printf("2--統計化學的平均成績\n");
printf("3--統計數學的平均成績\n");
printf("請選擇要統計的學科\n");
scanf("%d",&m);
if(m==1)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+b;
n++;
}
printf("物理的平均成績為 %2.2f\n",sum/n);
fclose(fp);
}
if(m==2)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+c;
n++;
}
printf("化學的平均成績為 %.2f\n",sum/n);
fclose(fp);
}
if(m==3)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+d;
n++;
}
printf("數學的平均成績為 %.2f\n",sum/n);
fclose(fp);
}
}
else
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
h[n]=(float)(b+c+d);
x[n]=a;
n++;
}
for(i=0;l==1&&i<n-1;i++)
{
l=0;
for(j=0;j<n-1-i;j++)
{
if(h[j]>h[j+1])
{
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
}
}
}
printf("排序後\n");
printf("學號\t總成績\t平均成績\n");
for(i=0;i<n;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
}
fclose(fp);
}
void main()
{
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","學號","物理成績","化學成績","數學成績");
fclose(fp);*/
while(1)
{
printf("\n\t\t*********歡迎使用學生信息管理系統*********\n\n");
printf("\n\t\t添加,請按1");
printf("\n\t\t修改,請按2");
printf("\n\t\t刪除,請按3");
printf("\n\t\t查詢,請按4");
printf("\n\t\t統計,請按5");
printf("\n\t\t退出,請按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
}
printf("\n\n操作完畢,請再次選擇!");
}
else
printf("\n\n選擇錯誤,請再次選擇!");
}
}
D. 學生成績管理系統
#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;
}
E. 設計一個學生成績管理系統,學生成績信息包括:學號,姓名,四門課成績,實現功能如下:
//我簡單寫,請借鑒:
#include"stdafx.h"
#include"stdio.h"
#include"string.h"
#include"math.h"
#include"time.h"
#include"string.h"#include<iostream>
usingnamespacestd;
structStudent//定義學生結構
{
charid[20];//id
charname[11];//姓名
charres[4];//成績
intend;//存儲時顯示換行,可去掉
Student(){end=0x0a0d;}//回車,換行
}list[100];//100個賬號,測試
voidmain()
{
srand((unsigned)time(0));//種子
charbuf[256];//緩存
//初始化學生100名
inti;
for(i=0;i<100;++i)
{
strcpy(list[i].id,itoa(i,buf,10));
strcpy(list[i].name,"某人");
strcpy(list[i].res,itoa(rand()%100,buf,10));
}
//保存數據
FILE*pf=fopen("data.txt","wb");
for(i=0;i<100;++i)
{
fwrite(&list[i],sizeof(Student),1,pf);
}
fclose(pf);
//讀出數據
Studentlist_1[100];//新數組
pf=fopen("data.txt","rb");
for(i=0;i<100;++i)
{
fread(&list_1[i],sizeof(Student),1,pf);
}
//顯示list_1測試
for(i=0;i<100;++i)
{
cout<<list_1[i].id<<""<<list_1[i].name<<""<<list_1[i].res<<endl;
}}
F. c語言實現設計一個學生成績管理系統課程
參考代碼如下,不過還是建議自己寫一寫比較好:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct student //結構體
{
char name[20]; //姓名
char number[20]; //學號
double math; //數學
double english; //英語
double chinese; //語文
double program; //程序
}s[50];
void head() //界面
{
printf(
"**********************************************************************\n"
"** **\n"
"** **\n"
"** 學生成績管理系統 **\n"
"** **\n"
"** 1.信息錄入 **\n"
"** 2.信息統計 **\n"
"** 3.信息瀏覽 **\n"
"** 4.信息查詢 **\n"
"** 5.信息排序 **\n"
"** 6.信息刪除 **\n"
"** 0.退出系統 **\n"
"** **\n"
"**********************************************************************\n"
);
}
void ru(struct student s[], int* n) //文件導入函數
{
FILE *p;
int i=*n;
if((p=fopen("數據.txt", "r"))==NULL)
{
n=n;
}
else
{
while(!feof(p))
{
fscanf(p, "%s%s%lf%lf%lf%lf\n", s[i].name, s[i].number, &s[i].math, &s[i].english, &s[i].chinese, &s[i].program);
i++;
*n=*n+1;
}
}
fclose(p);
}
void chu(struct student s[], int n)
{
FILE *p;
int i=0;
if((p=fopen("數據.txt", "w"))==NULL)
{
printf("無法打開此文件!");
}
else
{
while(i<n-1)
{
fprintf(p, "%s %s %lf %lf %lf %lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
i++;
}
fprintf(p, "%s %s %lf %lf %lf %lf", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
fclose(p);
}
void dayin(struct student s[], int n) //顯示所有信息
{
int i;
double all=0.0;
printf("\n姓名\t\t學號\t\t數學\t英語\t語文\t程序\t總分\n");
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program, all);
}
}
void shuru(struct student s[], int* n) //信息輸入函數
{
int i=*n, j, k, m;
printf("請輸入學生姓名:");
scanf("%s", s[i].name);
printf("請輸入學生學號:");
for (j=0; ; j++)
{
m=0;
scanf("%s", s[i].number);
for (k=0; k<i; k++)
{
if (strcmp(s[i].number, s[k].number)==0)
{
m=m+1;
printf("學號重復,請重新輸入學號:");
break;
}
}
if (m==0)
{
break;
}
}
printf("請輸入數學成績:");
scanf("%lf", &s[i].math);
printf("請輸入英語成績:");
scanf("%lf", &s[i].english);
printf("請輸入語文成績:");
scanf("%lf", &s[i].chinese);
printf("請輸入程序成績:") ;
scanf("%lf", &s[i].program);
printf("添加信息成功!\n");
*n=*n+1;
chu(s, *n);
}
void paixu(struct student s[], int n) //排序函數
{
int i, j;
double all1, all2;
struct student stu;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
all1=s[i].math+s[i].english+s[i].chinese+s[i].program;
all2=s[j].math+s[j].english+s[j].chinese+s[j].program;
if (all1<all2)
{
stu=s[i];
s[i]=s[j];
s[j]=stu;
}
}
}
printf("排序後的數據:\n");
dayin(s, n);
}
void chazhao(struct student s[], int n) //查找函數
{
char name[20], num[20];
int m1, m2=0, i, j;
printf("1.按姓名查找\n2.按學號查找\n選擇查詢方式(1或2):");
scanf("%d", &m1);
if (m1==1)
{
printf("請輸入您要查找的學生姓名:");
scanf("%s", name);
for (i=0; i<n; i++)
{
if (strcmp(s[i].name, name)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t學號\t數學\t英語\t語文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("沒有此學生信息!\n");
}
}
else if (m1==2)
{
printf("請輸入您要查找的學生學號:");
scanf("%s", num);
j=0;
for (i=0; i<n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m2=m2+1;
if (m2==1)
{
printf("\n姓名\t\t學號\t數學\t英語\t語文\t程序\n");
}
printf("%s\t\t%s\t\t%s\t\t%s\t\t%s\n", s[i].name, s[i].number, s[i].math, s[i].english, s[i].chinese, s[i].program);
}
}
if (m2==0)
{
printf("沒有此學生信息!\n");
}
}
}
void shanchu(struct student s[], int* n) //刪除函數
{
char num[20];
int m=0, i, j;
printf("請輸入您要刪除的學生學號:");
scanf("%s", num);
for (i=0; i<=*n; i++)
{
if (strcmp(s[i].number, num)==0)
{
m=m+1;
for (j=i; j<*n; j++)
{
s[j]=s[j+1];
}
*n=*n-1;
}
}
if (m==0)
{
printf("沒有此學生信息!\n");
}
else
{
chu(s, *n);
printf("刪除完畢!\n");
}
}
void allAndAver(struct student s[], int n)
{
int i ;
double all=0.0, aver=0.0;
for (i=0; i<n; i++)
{
all=s[i].math+s[i].english+s[i].chinese+s[i].program;
aver=all/4;
printf("%s\t\t%s\t\t%.1lf\t%.1lf\n", s[i].name, s[i].number, all, aver);
}
}
void Fail(struct student s[], int n) //統計單科不及格人數
{
int i, fail[4]={0};
for (i=0; i<n; i++)
{
if (s[i].math<60)
{
fail[0]++;
}
if (s[i].english<60)
{
fail[1]++;
}
if (s[i].chinese<60)
{
fail[2]++;
}
if (s[i].program<60)
{
fail[3]++;
}
}
printf("\n不及格信息:\n");
printf("數學不及格的人數為:%d人\n", fail[0]);
printf("英語不及格的人數為:%d人\n", fail[1]);
printf("語文不及格的人數為:%d人\n", fail[2]);
printf("程序不及格的人數為:%d人\n", fail[3]);
}
void Max(struct student s[], int n) //統計單科最高分人數
{
int i, counter[4]={0};
double max[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math>max[0])
{
max[0]=s[i].math;
}
if (s[i].math>max[1])
{
max[1]=s[i].math;
}
if (s[i].math>max[2])
{
max[2]=s[i].math;
}
if (s[i].math>max[3])
{
max[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==max[0])
{
counter[0]++;
}
if (s[i].math==max[1])
{
counter[1]++;
}
if (s[i].math==max[2])
{
counter[2]++;
}
if (s[i].math==max[3])
{
counter[3]++;
}
}
printf("\n最高分信息:\n");
printf("數學最高分為:%.1lf, 人數為:%d人\n", max[0], counter[0]);
printf("英語最高分為:%.1lf, 人數為:%d人\n", max[1], counter[1]);
printf("語文最高分為:%.1lf, 人數為:%d人\n", max[2], counter[2]);
printf("程序最高分為:%.1lf, 人數為:%d人\n", max[3], counter[3]);
}
void Min(struct student s[], int n) //統計單科最低分人數
{
int i, counter[4]={0};
double min[4]={s[0].math, s[0].english, s[0].chinese, s[0].program};
for (i=0; i<n; i++)
{
if (s[i].math<min[0])
{
min[0]=s[i].math;
}
if (s[i].math<min[1])
{
min[1]=s[i].math;
}
if (s[i].math<min[2])
{
min[2]=s[i].math;
}
if (s[i].math<min[3])
{
min[3]=s[i].math;
}
}
for (i=0; i<n; i++)
{
if (s[i].math==min[0])
{
counter[0]++;
}
if (s[i].math==min[1])
{
counter[1]++;
}
if (s[i].math==min[2])
{
counter[2]++;
}
if (s[i].math==min[3])
{
counter[3]++;
}
}
printf("\n最低分信息:\n");
printf("數學最低分為:%.1lf, 人數為:%d人\n", min[0], counter[0]);
printf("英語最低分為:%.1lf, 人數為:%d人\n", min[1], counter[1]);
printf("語文最低分為:%.1lf, 人數為:%d人\n", min[2], counter[2]);
printf("程序最低分為:%.1lf, 人數為:%d人\n", min[3], counter[3]);
}
void tongji(struct student s[], int n) //統計函數
{
printf("統計信息如下:\n");
printf("\n姓名\t\t學號\t\t總分\t平均分\n");
allAndAver(s, n);
Max(s, n);
Min(s, n) ;
Fail(s, n);
}
int main() //主函數
{
int k, n=0;
ru(s, &n);
chu(s, n);
while (1)
{
head();
printf("\n請按對應的鍵選擇相應的功能:");
scanf("%d",&k);
switch (k)
{
case 1:
shuru(s, &n);
break;
case 2:
tongji(s, n);
break;
case 3:
dayin(s, n);
break;
case 4:
chazhao(s, n);
break;
case 5:
paixu(s, n);
break;
case 6:
shanchu(s, &n);
break;
case 0:
exit(1);
break;
default : printf("請輸入正確的命令!\n");
}
system("pause");
system("cls");
}
return 0;
}
G. 編寫學生成績管理系統。已知有50個學生的C語言課程成績;
測試,我只輸入5個學生,你把常量改成50就行。
#include<stdio.h>
#definemaxSize5//學生人數,需要改這里!!
voidinput(int*score);
voidoutput(int*score);
intmax(int*score);
intmin(int*score);
intaverage(int*score);
intmain()
{
intscore[maxSize];
input(score);
output(score);
printf("最大值:%d
",max(score));
printf("最小值:%d
",min(score));
printf("平均值:%d
",average(score));
}
voidinput(int*score)
{
inti;
printf("輸入%d個學生的成績:
",maxSize);
for(i=0;i<maxSize;i++)
scanf("%d",&score[i]);
}
voidoutput(int*score)
{
inti;
printf("
輸入的學生的成績:
");
for(i=0;i<maxSize;i++)
printf("%d",score[i]);
printf("
");
}
intmax(int*score)
{
inti,max=score[0];
for(i=1;i<maxSize;i++)
if(max<score[i])
max=score[i];
returnmax;
}
intmin(int*score)
{
inti,min=score[0];
for(i=1;i<maxSize;i++)
if(min>score[i])
min=score[i];
returnmin;
}
intaverage(int*score)
{
inti,sum=0;
for(i=0;i<maxSize;i++)
sum=sum+score[i];
returnsum/maxSize;
}
H. C語言的小型學生成績管理系統
建議自己去改改
僅作為參考
#include<stdio.h>
#include<string.h>
typedef struct{
char name[20];
int number;
int grade;
int class;
float mark[10];
float average;
}T;
void show(T *student,int *tp,int n) /* 把成績顯示在屏幕上 */
{
int i,j;
char a[3]=" ";
printf("***********************************************************\n");
printf(" name number grade class average order\n");
for(i=0;i<n;i++)
{
printf("-----------------------------------------------------------\n");
printf("%d:\n",i+1);
printf(" %s %d %d %d %f %d\n",student[tp[i]].name,student[tp[i]].number,student[tp[i]].grade,student[tp[i]].class,student[tp[i]].average,tp[i]+1);
printf("mark:");
for(j=0;j<2;j++)
printf("%s%d:%f",a,j+1,student[tp[i]].mark[j]);
printf("\n");
}
printf("***********************************************************\n");
printf("\n\n\n");
}
void writefile(T *student,int n) /* 把成績存在磁碟上 */
{
FILE *fp;
int i,j;
if((fp=fopen("d:\\kanwei.txt","w+"))==NULL)
{
printf("can't open file");
exit(0);
}
for(i=0;i<=n;i++)
{
fprintf(fp,"%s %d %d %d ",student[i].name,student[i].number,student[i].grade,student[i].class);
for(j=0;j<2;j++)
fprintf(fp,"%f ",student[i].mark[j]);
fprintf(fp,"%f\n",student[i].average);
}
fclose(fp);
}
void students(T *student,T *temp,int m,int n,int k) /* 實現兩個結構體的拷貝 */
{
int i;
if(k==0)
{
strcpy(student[n].name,temp[m].name);
student[n].number=temp[m].number;
student[n].grade=temp[m].grade;
student[n].class=temp[m].class;
for(i=0;i<2;i++)
student[n].mark[i]=temp[m].mark[i];
student[n].average=temp[m].average;
}
else if(k==1)
{
strcpy(temp[m].name,student[n].name);
temp[m].number=student[n].number;
temp[m].grade=student[n].grade;
temp[m].class=student[n].class;
for(i=0;i<2;i++)
temp[m].mark[i]=student[n].mark[i];
temp[m].average=student[n].average;
}
}
void addfile(T *student,int n) /* 加入新學生到文件 */
{
T temp[2];
int i,j=1;
float ave=0.0;
printf("Please input the student:\n");
printf(" name number grade class mark1 mark2\n");
printf("****************************************************\n");
scanf("%s",temp[0].name);
scanf("%d",&temp[0].number);
scanf("%d",&temp[0].grade);
scanf("%d",&temp[0].class);
for(i=0;i<2;i++)
{
scanf("%f",&temp[0].mark[i]);
ave=ave+temp[0].mark[i];
}
temp[0].average=ave=ave/2;
i=0;
while(ave<=student[i].average&&i<n)
i++;
students(student,temp,j%2,i,1); /* temp[j/2]=student[i]; */
students(student,temp,(j+1)%2,i,0); /* student[i]=stu; */
for(;i<n;i++)
{
j++;
students(student,temp,j%2,i+1,1); /* temp[(i+2)/2]=student[i+1]; */
students(student,temp,(j+1)%2,i+1,0); /* student[i+1]=temp[(i+1)/2]; */
}
writefile(student,i);
}
void showall(T *student,int n) /* 顯示文件中所有的學生 */
{
int i;
int a[30];
for(i=0;i<n;i++)
a[i]=i;
show(student,a,n);
}
int find(T *student,int n,int *tp) /* 在文件中查詢學生可以多行查詢 */
{
int k,im=0,i,m,num,gra,clas;
char na[20];
float ord;
printf("*******************************\n");
printf(" name n&g&c ave order\n");
printf(" 1 2 3 4 \n");
printf("*******************************\n");
scanf("%d",&k);
switch(k)
{
case 1:
scanf("%s",&na);
for(i=0;i<n;i++)
{
if(strcmp(student[i].name,na)==0)
{
tp[im++]=i;
}
}
break;
case 2:
scanf("%d%d%d",&num,&gra,&clas);
for(i=0;i<n;i++)
{
if(student[i].number==num&&student[i].grade==gra&&student[i].class==clas)
{
tp[im++]=i;
}
}
break;
case 3:
scanf("%f",&ord);
for(i=0;i<n;i++)
{
if(ord==student[i].average)
{
tp[im++]=i;
}
}
break;
case 4:
scanf("%d",&m);
if(m<=n)
{
tp[im++]=m-1;
}
break;
case 5:
break;
default:
printf("error operate!\n");
exit(0);
}
if(im>=1)
show(student,tp,im);
if(im==0&&k<5&&k>=1)
printf("cant find!\n");
return(im);
}
dele(T *student,int n,int *tp) /* 對某個學生進行刪除 */
{
int j;
printf("choose the student:\n");
j=find(student,n,tp);
if(j>=1)
{
if(j>1)
{
printf("Which one do you want to choose?\n");
scanf("%d",&j);
j=tp[j-1];
}
else
j=tp[0];
for(;j<n-1;j++)
students(student,student,j+1,j,0);
writefile(student,j-1);
}
}
void modify(T *student,int n,int *tp) /* 對某個學生進行修改 */
{
dele(student,n,tp);
addfile(student,n-1);
}
void readfile(int m) /* 讀取文件中的數據,程序的基礎 */
{
FILE *fp;
T student[30];
float mark[10],ave;
int i=0,j,tp[20];
if((fp=fopen("d:\\kanwei.txt","a+t"))==NULL)
{
printf("can't open file");
exit(0);
}
while(fscanf(fp,"%s%d%d%d",student[i].name,&student[i].number,&student[i].grade,&student[i].class)!=EOF)
{
for(j=0;j<2;j++)
{
fscanf(fp,"%f",&mark[j]);
student[i].mark[j]=mark[j];
}
fscanf(fp,"%f",&ave);
student[i].average=ave;
i++;
}
fclose(fp);
switch(m)
{
case 1:
find(student,i,tp);
break;
case 2:
addfile(student,i);
break;
case 3:
dele(student,i,tp);
break;
case 4:
modify(student,i,tp);
break;
case 5:
showall(student,i);
break;
default:
exit(0);
}
}
main() /* 主程序 */
{
int i=1;
while(i)
{
printf(" Choose the operate:\n");
printf("******************************************************\n");
printf(" find add delete modify showall exit\n");
printf(" 1 2 3 4 5 0\n");
printf("******************************************************\n");
scanf("%d",&i);
readfile(i);
}
}