您现在的位置是: 首页 > 招生信息 招生信息
高考成绩管理系统c_高考成绩查询系统维护
tamoadmin 2024-07-12 人已围观
简介1.C语言学生管理系统2.c语言编写查询学生成绩管理程序。3.求用C++编写一个成绩管理系统,题目如下:4.c++ 学生成绩管理系统5.用C++编写一个学生成绩管理系统,并编写一个友元函数能完成对成绩进行从高到低排序可以编译运行通过 可惜不能发附件 只能贴代码了#include "stdio.h" /*标准输入输出函数库*/#include "stdlib.h" /*标准函数库*/#incl
1.C语言学生管理系统
2.c语言编写查询学生成绩管理程序。
3.求用C++编写一个成绩管理系统,题目如下:
4.c++ 学生成绩管理系统
5.用C++编写一个学生成绩管理系统,并编写一个友元函数能完成对成绩进行从高到低排序
可以编译运行通过 可惜不能发附件 只能贴代码了
#include "stdio.h" /*标准输入输出函数库*/
#include "stdlib.h" /*标准函数库*/
#include "string.h" /*字符串函数库*/
#define HEADER1 " ----------------------------STUDENT---------------------------------- \n"
#define HEADER2 " | number | name |Comp|Math|Eng | sum | ave |mici | \n"
#define HEADER3 " |---------------|---------------|----|----|----|--------|-------|-----| "
#define FORMAT " | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |%4d |\n"
#define DATA p->data.num,p->data.name,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.total,p->data.ave,p->data.mingci
#define END " --------------------------------------------------------------------- \n"
int saveflag=0; /*是否需要存盘的标志变量*/
/*定义与学生有关的数据结构*/
typedef struct student /*标记为student*/
{
char num[10]; /*学号*/
char name[15]; /*姓名*/
int cgrade; /*C语言成绩*/
int mgrade; /*数学成绩*/
int egrade; /*英语成绩*/
int total; /*总分*/
float ave; /*平均分*/
int mingci; /*名次*/
};
/*定义每条记录或结点的数据结构,标记为:node*/
typedef struct node
{
struct student data; /*数据域*/
struct node *next; /*指针域*/
}Node,*Link; /*Node为node类型的结构变量,*Link为node类型的指针变量*/
void menu() /*主菜单*/
{
printf(" The Students' Grade Management System \n");
printf(" *************************Menu********************************\n");
printf(" * 1 input record 2 delete record *\n");
printf(" * 3 search record 4 modify record *\n");
printf(" * 5 insert record 6 count record *\n");
printf(" * 7 sort reord 8 save record *\n");
printf(" * 9 display record 0 quit system *\n");
printf(" *************************************************************\n");
/*cprintf()送格式化输出至文本窗口屏幕中*/
}
void printheader() /*格式化输出表头*/
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
void printdata(Node *pp) /*格式化输出表中数据*/
{
Node* p;
p=pp;
printf(FORMAT,DATA);
}
void Wrong() /*输出按键错误信息*/
{
printf("\n\n\n\n\n***********Error:input has wrong! press any key to continue**********\n");
getchar();
}
void Nofind() /*输出未查找此学生的信息*/
{
printf("\n=====>Not find this student!\n");
}
void Disp(Link l) /*显示单链表l中存储的学生记录,内容为student结构中定义的内容*/
{
Node *p;
p=l->next; /*l存储的是单链表中头结点的指针,该头结点没有存储学生信息,指针域指向的后继结点才有学生信息*/
if(!p) /*p==NULL,NUll在stdlib中定义为0*/
{
printf("\n=====>Not student record!\n");
getchar();
return;
}
printf("\n\n");
printheader(); /*输出表格头部*/
while(p) /*逐条输出链表中存储的学生信息*/
{
printdata(p);
p=p->next; /*移动直下一个结点*/
printf(HEADER3);
}
getchar();
}
/*************************************************************
作用:用于定位链表中符合要求的节点,并返回指向该节点的指针
参数:findmess[]保存要查找的具体内容; nameornum[]保存按什么查找;
在单链表l中查找;
**************************************************************/
Node* Locate(Link l,char findmess[],char nameornum[])
{
Node *r;
if(strcmp(nameornum,"num")==0) /*按学号查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.num,findmess)==0) /*若找到findmess值的学号*/
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /*按姓名查询*/
{
r=l->next;
while(r)
{
if(strcmp(r->data.name,findmess)==0) /*若找到findmess值的学生姓名*/
return r;
r=r->next;
}
}
return 0; /*若未找到,返回一个空指针*/
}
/*输入字符串,并进行长度验证(长度<lens)*/
void stringinput(char *t,int lens,char *notice)
{
char n[255];
do{
printf(notice); /*显示提示信息*/
scanf("%s",n); /*输入字符串*/
if(strlen(n)>lens)printf("\n exceed the required length! \n"); /*进行长度校验,超过lens值重新输入*/
}while(strlen(n)>lens);
strcpy(t,n); /*将输入的字符串拷贝到字符串t中*/
}
/*输入分数,0<=分数<=100)*/
int numberinput(char *notice)
{
int t=0;
do{
printf(notice); /*显示提示信息*/
scanf("%d",&t); /*输入分数*/
if(t>100 || t<0) printf("\n score must in [0,100]! \n"); /*进行分数校验*/
}while(t>100 || t<0);
return t;
}
/*增加学生记录*/
void Add(Link l)
{
Node *p,*r,*s; /*实现添加操作的临时的结构体指针变量*/
char ch,flag=0,num[10];
r=l;
s=l->next;
Disp(l); /*先打印出已有的学生信息*/
while(r->next!=NULL)
r=r->next; /*将指针移至于链表最末尾,准备添加记录*/
while(1) /*一次可输入多条记录,直至输入学号为0的记录结点添加操作*/
{
while(1) /*输入学号,保证该学号没有被使用,若输入学号为0,则退出添加记录操作*/
{
stringinput(num,10,"input number(press '0'return menu):"); /*格式化输入学号并检验*/
flag=0;
if(strcmp(num,"0")==0) /*输入为0,则退出添加操作,返回主界面*/
{return;}
s=l->next;
while(s) /*查询该学号是否已经存在,若存在则要求重新输入一个未被占用的学号*/
{
if(strcmp(s->data.num,num)==0)
{
flag=1;
break;
}
s=s->next;
}
if(flag==1) /*提示用户是否重新输入*/
{ getchar();
printf("=====>The number %s is not existing,try again?(y/n):",num);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
continue;
else
return;
}
else
{break;}
}
p=(Node *)malloc(sizeof(Node)); /*申请内存空间*/
if(!p)
{
printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/
return ; /*返回主界面*/
}
strcpy(p->data.num,num); /*将字符串num拷贝到p->data.num中*/
stringinput(p->data.name,15,"Name:");
p->data.cgrade=numberinput("C language Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/
p->data.mgrade=numberinput("Math Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/
p->data.egrade=numberinput("English Score[0-100]:"); /*输入并检验分数,分数必须在0-100之间*/
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade; /*计算总分*/
p->data.ave=(float)(p->data.total/3); /*计算平均分*/
p->data.mingci=0;
p->next=NULL; /*表明这是链表的尾部结点*/
r->next=p; /*将新建的结点加入链表尾部中*/
r=p;
saveflag=1;
}
return ;
}
void Qur(Link l) /*按学号或姓名,查询学生记录*/
{
int select; /*1:按学号查,2:按姓名查,其他:返回主界面(菜单)*/
char searchinput[20]; /*保存用户输入的查询内容*/
Node *p;
if(!l->next) /*若链表为空*/
{
printf("\n=====>No student record!\n");
getchar();
return;
}
printf("\n =====>1 Search by number =====>2 Search by name\n");
printf(" please choice[1,2]:");
scanf("%d",&select);
if(select==1) /*按学号查询*/
{
stringinput(searchinput,10,"input the existing student number:");
p=Locate(l,searchinput,"num");/*在l中查找学号为searchinput值的节点,并返回节点的指针*/
if(p) /*若p!=NULL*/
{
printheader();
printdata(p);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else if(select==2) /*按姓名查询*/
{
stringinput(searchinput,15,"input the existing student name:");
p=Locate(l,searchinput,"name");
if(p)
{
printheader();
printdata(p);
printf(END);
printf("press any key to return");
getchar();
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/*删除学生记录:先找到保存该学生记录的节点,然后删除该节点*/
void Del(Link l)
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{ system("cls");
printf("\n=====>No student record!\n");
getchar();
return;
}
system("cls");
Disp(l);
printf("\n =====>1 Delete by number =====>2 Delete by name\n");
printf(" please choice[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"input the existing student number:");
p=Locate(l,findmess,"num");
if(p) /*p!=NULL*/
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;/*将p所指节点从链表中去除*/
free(p); /*释放内存空间*/
printf("\n=====>delete success!\n");
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else if(sel==2) /*先按姓名查询到该记录所在的节点*/
{
stringinput(findmess,15,"input the existing student name");
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>delete success!\n");
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
/*修改学生记录。先按输入的学号查询到该记录,然后提示用户修改学号之外的值,学号不能修改*/
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>No student record!\n");
getchar();
return;
}
printf("modify student recorder");
Disp(l);
stringinput(findmess,10,"input the existing student number:"); /*输入并检验该学号*/
p=Locate(l,findmess,"num"); /*查询到该节点*/
if(p) /*若p!=NULL,表明已经找到该节点*/
{
printf("Number:%s,\n",p->data.num);
printf("Name:%s,",p->data.name);
stringinput(p->data.name,15,"input new name:");
printf("C language score:%d,",p->data.cgrade);
p->data.cgrade=numberinput("C language Score[0-100]:");
printf("Math score:%d,",p->data.mgrade);
p->data.mgrade=numberinput("Math Score[0-100]:");
printf("English score:%d,",p->data.egrade);
p->data.egrade=numberinput("English Score[0-100]:");
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=(float)(p->data.total/3);
p->data.mingci=0;
printf("\n=====>modify success!\n");
Disp(l);
saveflag=1;
}
else
Nofind();
getchar();
}
/*插入记录:按学号查询到要插入的节点的位置,然后在该学号之后插入一个新节点。*/
void Insert(Link l)
{
Link p,v,newinfo; /*p指向插入位置,newinfo指新插入记录*/
char ch,num[10],s[10]; /*s[]保存插入点位置之前的学号,num[]保存输入的新记录的学号*/
int flag=0;
v=l->next;
system("cls");
Disp(l);
while(1)
{ stringinput(s,10,"please input insert location after the Number:");
flag=0;v=l->next;
while(v) /*查询该学号是否存在,flag=1表示该学号存在*/
{
if(strcmp(v->data.num,s)==0) {flag=1;break;}
v=v->next;
}
if(flag==1)
break; /*若学号存在,则进行插入之前的新记录的输入操作*/
else
{ getchar();
printf("\n=====>The number %s is not existing,try again?(y/n):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{continue;}
else
{return;}
}
}
/*以下新记录的输入操作与Add()相同*/
stringinput(num,10,"input new student Number:");
v=l->next;
while(v)
{
if(strcmp(v->data.num,num)==0)
{
printf("=====>Sorry,the new number:'%s' is existing !\n",num);
printheader();
printdata(v);
printf("\n");
getchar();
return;
}
v=v->next;
}
newinfo=(Node *)malloc(sizeof(Node));
if(!newinfo)
{
printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/
return ; /*返回主界面*/
}
strcpy(newinfo->data.num,num);
stringinput(newinfo->data.name,15,"Name:");
newinfo->data.cgrade=numberinput("C language Score[0-100]:");
newinfo->data.mgrade=numberinput("Math Score[0-100]:");
newinfo->data.egrade=numberinput("English Score[0-100]:");
newinfo->data.total=newinfo->data.egrade+newinfo->data.cgrade+newinfo->data.mgrade;
newinfo->data.ave=(float)(newinfo->data.total/3);
newinfo->data.mingci=0;
newinfo->next=NULL;
saveflag=1; /*在main()有对该全局变量的判断,若为1,则进行存盘操作*/
/*将指针赋值给p,因为l中的头节点的下一个节点才实际保存着学生的记录*/
p=l->next;
while(1)
{
if(strcmp(p->data.num,s)==0) /*在链表中插入一个节点*/
{
newinfo->next=p->next;
p->next=newinfo;
break;
}
p=p->next;
}
Disp(l);
printf("\n\n");
getchar();
}
/*统计该班的总分第一名和单科第一,和各科不及格人数*/
void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt; /*用于指向分数最高的节点*/
Node *r=l->next;
int countc=0,countm=0,counte=0; /*保存三门成绩中不及格的人数*/
if(!r)
{
printf("\n=====>Not student record!\n");
getchar();
return ;
}
Disp(l);
pm=pe=pc=pt=r;
while(r)
{
if(r->data.cgrade<60) countc++;
if(r->data.mgrade<60) countm++;
if(r->data.egrade<60) counte++;
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.total>=pt->data.total) pt=r;
r=r->next;
}
printf("\n------------------------------the TongJi result--------------------------------\n");
printf("C Language<60:%d (ren)\n",countc);
printf("Math <60:%d (ren)\n",countm);
printf("English <60:%d (ren)\n",counte);
printf("-------------------------------------------------------------------------------\n");
printf("The highest student by total scroe name:%s totoal score:%d\n",pt->data.name,pt->data.total);
printf("The highest student by English score name:%s totoal score:%d\n",pe->data.name,pe->data.egrade);
printf("The highest student by Math score name:%s totoal score:%d\n",pm->data.name,pm->data.mgrade);
printf("The highest student by C score name:%s totoal score:%d\n",pc->data.name,pc->data.cgrade);
printf("\n\npress any key to return");
getchar();
}
/*利用插入排序法实现单链表的按总分字段的降序排序,从高到低*/
void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;
int i=0;
if(l->next==NULL)
{ system("cls");
printf("\n=====>Not student record!\n");
getchar();
return ;
}
ll=(Node*)malloc(sizeof(Node)); /*用于创建新的节点*/
if(!ll)
{
printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/
return ; /*返回主界面*/
}
ll->next=NULL;
Disp(l); /*显示排序前的所有学生记录*/
p=l->next;
while(p) /*p!=NULL*/
{
s=(Node*)malloc(sizeof(Node)); /*新建节点用于保存从原链表中取出的节点信息*/
if(!s) /*s==NULL*/
{
printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/
return ; /*返回主界面*/
}
s->data=p->data; /*填数据域*/
s->next=NULL; /*指针域为空*/
rr=ll;
/*rr链表于存储插入单个节点后保持排序的链表,ll是这个链表的头指针,每次从头开始查找插入位置*/
while(rr->next!=NULL && rr->next->data.total>=p->data.total)
{rr=rr->next;} /*指针移至总分比p所指的节点的总分小的节点位置*/
if(rr->next==NULL)/*若新链表ll中的所有节点的总分值都比p->data.total大时,就将p所指节点加入链表尾部*/
rr->next=s;
else /*否则将该节点插入至第一个总分字段比它小的节点的前面*/
{
s->next=rr->next;
rr->next=s;
}
p=p->next; /*原链表中的指针下移一个节点*/
}
l->next=ll->next; /*ll中存储是的已排序的链表的头指针*/
p=l->next; /*已排好序的头指针赋给p,准备填写名次*/
while(p!=NULL) /*当p不为空时,进行下列操作*/
{
i++; /*结点序号*/
p->data.mingci=i; /*将名次赋值*/
p=p->next; /*指针后移*/
}
Disp(l);
saveflag=1;
printf("\n =====>sort complete!\n");
}
/*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时, 会提示用户存盘*/
void Save(Link l)
{
FILE* fp;
Node *p;
int count=0;
fp=fopen("c:\\student","wb");/*以只写方式打开二进制文件*/
if(fp==NULL) /*打开文件失败*/
{
printf("\n=====>open file error!\n");
getchar();
return ;
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)/*每次写一条记录或一个节点信息至文件*/
{
p=p->next;
count++;
}
else
{
break;
}
}
if(count>0)
{
getchar();
printf("\n\n\n\n\n=====>save file complete,total saved's record number is:%d\n",count);
getchar();
saveflag=0;
}
else
{
printf("the current link is empty,no student record is saved!\n");
getchar();
}
fclose(fp); /*关闭此文件*/
}
void main()
{
Link l; /*定义链表*/
FILE *fp; /*文件指针*/
int select; /*保存选择结果变量*/
char ch; /*保存(y,Y,n,N)*/
int count=0; /*保存文件中的记录条数(或结点个数)*/
Node *p,*r; /*定义记录指针变量*/
l=(Node*)malloc(sizeof(Node));
if(!l)
{
printf("\n allocate memory failure "); /*如没有申请到,打印提示信息*/
return ; /*返回主界面*/
}
l->next=NULL;
r=l;
fp=fopen("C:\\student","ab+"); /*以追加方式打开一个二进制文件,可读可写,若此文件不存在,会创建此文件*/
if(fp==NULL)
{
printf("\n=====>can not open file!\n");
exit(0);
}
while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(!p)
{
printf(" memory malloc failure!\n"); /*没有申请成功*/
exit(0); /*退出*/
}
if(fread(p,sizeof(Node),1,fp)==1) /*一次从文件中读取一条学生成绩记录*/
{
p->next=NULL;
r->next=p;
r=p; /*r指针向后移一个位置 r指向最后一个结点 也就是说在完成文件的所有记录读之后,r指向尾 如l->next->next->......r->NULL;*/
count++;
}
}
fclose(fp); /*关闭文件*/
printf("\n=====>open file sucess,the total records number is : %d.\n",count);
menu();
while(1)
{
menu();
p=r;
printf("\n Please Enter your choice(0~9):"); /*显示提示信息*/
scanf("%d",&select);
if(select==0)
{
if(saveflag==1) /*若对链表的数据有修改且未进行存盘操作,则此标志为1*/
{ getchar();
printf("\n=====>Whether save the modified record to file?(y/n):");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("=====>thank you for useness!");
getchar();
break;
}
switch(select)
{
case 1:Add(l);break; /*增加学生记录*/
case 2:Del(l);break; /*删除学生记录*/
case 3:Qur(l);break; /*查询学生记录*/
case 4:Modify(l);break; /*修改学生记录*/
case 5:Insert(l);break; /*插入学生记录*/
case 6:Tongji(l);break; /*统计学生记录*/
case 7:Sort(l);break; /*排序学生记录*/
case 8:Save(l);break; /*保存学生记录*/
case 9:Disp(l);break; /*显示学生记录*/
default: Wrong();getchar();break; /*按键有误,必须为数值0-9*/
}
}
}
C语言学生管理系统
已调通,大致功能相当
#include <stdio.h>
#include <stdlib.h> /*其它说明*/
#include <string.h> /*字符串函数*/
#include <time.h>
#define LEN sizeof(STUDENT)
typedef struct stu /*定义结构体数组用于缓存数据*/
{
char num[6];
char name[5];
int score[3];
int sum;
float average;
int order;
struct stu *next;
}STUDENT;
/*初始化函数*/
STUDENT *Init()
{
return NULL; /*返回空指针*/
}
/*菜单选择函数*/
int Menu_Select()
{
int n;
struct tm *pt; /*定义时间结构体*/
time_t t;
t=time(NULL);
pt=localtime(&t); /*读取系统日期并把它放到结构体中*/
printf("\n按任一键进入主菜单...... \n"); /*按任一键进入主菜单*/
//getch(); /*从键盘读取一个字符,但不显示于屏幕*/
system("pause");
system("cls"); /*清屏*/
printf("********************************************************************************\n");
printf("\t\t 欢迎 Welcome to\n");
printf("\n\t\t\t 使用学生管理系统1.0\n");
printf("*************************************MENU***************************************\n");
printf("\t\t\t1. 输入学生成绩记录 Enter the record\n"); /*输入学生成绩记录*/
printf("\t\t\t2. 显示 Print the record\n"); /*显示*/
printf("\t\t\t3. 寻找 Search record on name\n"); /*寻找*/
printf("\t\t\t4. 删除 Delete a record\n"); /*删除*/
printf("\t\t\t5. 排序 Sort to make New a file\n"); /*排序*/
printf("\t\t\t6. 插入 Insert record to list\n"); /*插入*/
printf("\t\t\t7. 保存 Save the file\n"); /*保存*/
printf("\t\t\t8. 读取 Load the file\n"); /*读取*/
printf("\t\t\t9. 退出 Quit\n"); /*退出*/
printf("\n********************************************************************************\n");
printf("\t\t\t\t当前系统日期:%d-%d-%d\n",pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday); /*显示当前系统日期*/
do
{
printf("\n\t\t\t输入你的选择Enter your choice(1~9):");
fflush(stdin);
scanf("%d",&n);
}while(n<1||n>9); /*如果选择项不在1~9之间则重输*/
return(n); /*返回选择项,主函数根据该数调用相应的函数*/
}
/*输入函数*/
STUDENT *Create()
{
int i,s;
STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/
system("cls");
for(;;)
{
p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/
if(!p) /*如果指针p为空*/
{
printf("\n输出内存溢出. Out of memory."); /*输出内存溢出*/
return (head); /*返回头指针,下同*/
}
printf("输入学号Enter the num(0:list end):");
scanf("%s",p->num);
if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/
printf("输入名字Enter the name:");
scanf("%s",p->name);
printf("请输入3门成绩Please enter the %d scores\n",3); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<3;i++) /*3门课程循环3次*/
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&p->score[i]);
if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/
printf("数据错误,请重新输入 Data error,please enter again.\n");
}while(p->score[i]<0 || p->score[i]>100);
s=s+p->score[i]; /*累加各门成绩*/
}
p->sum=s; /*将总分保存*/
p->average=(float)s/3; /*先用强制类型转换将s转换成float型,再求平均值*/
p->order=0; /*未排序前此值为0*/
p->next=head; /*将头结点做为新输入结点的后继结点*/
head=p; /*新输入结点为新的头结点*/
}
return(head);
}
/* 显示全部记录函数*/
void Print(STUDENT *head)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
system("cls");
p=head; /*初值为头指针*/
printf("\n************************************STUDENT************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
while(p!=NULL)
{
i++;
printf("| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("-------------------------------------------------------------------------------\n");
printf("**************************************END**************************************\n");
}
/*查找记录函数*/
void Search(STUDENT *head)
{
STUDENT *p; /* 移动指针*/
char s[5]; /*存放姓名用的字符数组*/
system("cls");
printf("请输入个姓名来查找. Please enter name for searching.\n");
scanf("%s",s);
p=head; /*将头指针赋给p*/
while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p!=NULL) /*如果指针不为空*/
{
printf("\n*************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
}
else
printf("\n没有该学生 There is no num %s student on the list.\n",s); /*显示没有该学生*/
}
/*删除记录函数*/
STUDENT *Delete(STUDENT *head)
{
//int n;
STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/
char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/
system("cls");
printf("请输入要删除的学号 Please enter the Deleted num: ");
scanf("%s",s);
p1=p2=head; /*给p1和p2赋初值头指针*/
while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/
p1=p1->next; /*将p1指针指向下一条记录*/
}
if(strcmp(p1->num,s)==0) /*学号找到了*/
{
printf("**************************************FOUND************************************\n");
printf("-------------------------------------------------------------------------------\n");
printf("| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\n");
printf("-------------------------------------------------------------------------------\n");
printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",
p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order);
printf("-------------------------------------------------------------------------------\n");
printf("***************************************END**************************************\n");
printf("\n是否要删除,输入Y删除,N则退出\nAre you sure to Delete the student Y/N ?"); /*提示是否要删除,输入Y删除,N则退出*/
for(;;)
{
scanf("%c",&c);
if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/
if(c=='y'||c=='Y')
{
if(p1==head) /*若p1==head,说明被删结点是首结点*/
head=p1->next; /*把第二个结点地址赋予head*/
else
p2->next=p1->next; /*否则将一下结点地址赋给前一结点地址*/
//n=n-1;
printf("\n学号为(Num): %s 学生以被删除(student have been Deleted.)\n",s);
printf("别忘了保存. Don't forget to Save.\n");break; /*删除后就跳出循环*/
}
}
}
else
printf("\n没有这个学生在表上\nThere is no num %s student on the list.\n",s); /*找不到该结点*/
return(head);
}
/*排序函数*/
STUDENT *Sort(STUDENT *head)
{
int i=0; /*保存名次*/
STUDENT *p1,*p2,*t,*temp; /*定义临时指针*/
temp=head->next; /*将原表的头指针所指的下一个结点作头指针*/
head->next=NULL; /*第一个结点为新表的头结点*/
while(temp!=NULL) /*当原表不为空时,进行排序*/
{
t=temp; /*取原表的头结点*/
temp=temp->next; /*原表头结点指针后移*/
p1=head; /*设定移动指针p1,从头指针开始*/
p2=head; /*设定移动指针p2做为p1的前驱,初值为头指针*/
while(t->average<p1->average&&p1!=NULL) /*作成绩平均分比较*/
{
p2=p1; /*待排序点值小,则新表指针后移*/
p1=p1->next;
}
if(p1==p2) /*p1==p2,说明待排序点值大,应排在首位*/
{
t->next=p1; /*待排序点的后继为p*/
head=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*/
{
t->next=p1; /*t的后继是p1*/
p2->next=t; /*p2的后继是t*/
}
}
p1=head; /*已排好序的头指针赋给p1,准备填写名次*/
while(p1!=NULL) /*当p1不为空时,进行下列操作*/
{
i++; /*结点序号*/
p1->order=i; /*将结点序号赋值给名次*/
p1=p1->next; /*指针后移*/
}
printf("排序成功 Sorting is sucessful.\n"); /*排序成功*/
return (head);
}
/*插入记录函数*/
STUDENT *Insert(STUDENT *head,STUDENT *New)
{
STUDENT *p0,*p1,*p2;
//int n;
int sum1,i;
p1=head; /*使p1指向第一个结点*/
p0=New; /*p0指向要插入的结点*/
printf("\nPlease enter a New record.\n"); /*提示输入记录信息*/
printf("输入学号Enter the num:");
scanf("%s",New->num);
printf("输入名字Enter the name:");
scanf("%s",New->name);
printf("Please enter the %d scores.\n",3);
sum1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<3;i++)
{
do
{
printf("成绩score%d:",i+1);
scanf("%d",&New->score[i]);
if(New->score[i]>100||New->score[i]<0)
printf("数据错误Data error,please enter again.\n");
}while(New->score[i]>100||New->score[i]<0);
sum1=sum1+New->score[i]; /*累加各门成绩*/
}
New->sum=sum1; /*将总分存入新记录中*/
New->average=(float)sum1/3;
New->order=0;
if(head==NULL) /*原来的链表是空表*/
{
head=p0;
p0->next=NULL;
} /*使p0指向的结点作为头结点*/
else
{
while((p0->average<p1->average)&&(p1->next!=NULL))
{
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*p1后移一个结点*/
}
if(p0->average>=p1->average)
{
if(head==p1)head=p0; /*插到原来第一个结点之前*/
else p2->next=p0; /*插到p2指向的结点之后*/
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
} /*插到最后的结点之后*/
}
//n=n+1; /*结点数加1*/
head=Sort(head); /*调用排序的函数,将学生成绩重新排序*/
printf("\n学生Student %s 已被更新have been inserted.\n",New->name);
printf("不要忘了保存Don't forget to Save the New file.\n");
return(head);
}
/*保存数据到文件函数*/
void Save(STUDENT *head)
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10];
printf("输出文件例如:c:\\score Enter outfile name,for example c:\\score\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"w"))==NULL) /*为输出打开一个二进制文件,为只写方式*/
{
printf("打不开文件Cannot open the file\n");
return; /*若打不开则返回菜单*/
}
printf("\n保存中...Saving the file......\n");
p=head; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,LEN,1,fp); /*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("保存成功....Save the file successfully!\n");
}
/* 从文件读数据函数*/
STUDENT *Load()
{
STUDENT *p1,*p2,*head=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10];
printf("倒入文件例如:c:\\score Enter infile name,for example c:\\score\n");
scanf("%s",infile);
if((fp=fopen(infile,"r"))==NULL) /*打开一个二进制文件,为只读方式*/
{
printf("打不开文件Can not open the file.\n");
return(head);
}
printf("\n寻找文件...Loading the file!\n");
p1=(STUDENT *)malloc(LEN); /*开辟一个新单元*/
if(!p1)
{
printf("内存溢出!Out of memory!\n");
return(head);
}
head=p1; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(fread(p1,LEN,1,fp)!=1) break; /*如果没读到数据,跳出循环*/
p1->next=(STUDENT *)malloc(LEN); /*为下一个结点开辟空间*/
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1; /*使p2指向刚才p1指向的结点*/
p1=p1->next; /*指针后移,新读入数据链到当前表尾*/
}
p2->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp);
printf("\n你成功的从文件中读取了数据!\nYou have success to read data from the file!\n");
return (head);
}
/*主函数界面*/
int main()
{
STUDENT *head,New;
head=Init(); //链表初始化,使head的值为NULL
for(;;) //循环无限次
{
switch(Menu_Select())
{
case 1:head=Create();break;
case 2:Print(head);break;
case 3:Search(head);break;
case 4:head=Delete(head);break;
case 5:head=Sort(head);break;
case 6:head=Insert(head,&New);break; //&New表示返回地址
case 7:Save(head);break;
case 8:head=Load(); break;
case 9:exit(0); //如菜单返回值为9则程序结束
}
}
return 0;
}
c语言编写查询学生成绩管理程序。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define max 20
typedef struct student //学生
{
char sno[max]; // 学号
char sname[max]; //姓名
char sex[max]; //性别
char age[max]; //年龄
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年级
struct student* next;
} student;
student* head;
int LogOn() //登录模块,已实现输入密码不回显,如果中途发现输错某几位,可退格键重输
{
char username[max],password[max];
printf("\n请输入用户名:");
scanf("%s",username);
printf("\n请输入密码(最多15位):");
//开始以不回显且支持退格方式获取输入密码
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//条件i>=0是用于限制退格的范围
{
if(password[i-1]=='\b')//对退格键的处理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';
//已获取密码。验证用户身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登录成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用来建新结点,ptr用来暂存头结点
do
{
s=(student*)malloc(sizeof(student)); // 新建一个学生结点
printf("\n开始注册..."); //开始注册
printf("\n请输入该学生的学号:");
scanf("%s",s->sno);
printf("\n请输入该学生的姓名:");
scanf("%s",s->sname);
printf("\n请输入该学生的性别:");
scanf("%s",s->sex);
printf("\n请输入该学生的年龄:");
scanf("%s",s->age);
printf("\n请输入该学生的系:");
scanf("%s",s->depart);
printf("\n请输入该学生所在的班:");
scanf("%s",s->classs);
printf("\n请输入该学生所在的年级");
scanf("%s",s->grade);
ptr=head;
head=s;//将新结点插入队头
s->next=ptr;
fflush(stdin);
printf("\n请问是否继续注册?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
return;
}
void ElePrint(char str[]) //输出单个元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//为了对齐输出,需插入一些空格
return;
}
int LinePrint(student *ptr) //输出一行
{
if(ptr==NULL) //检查传进来的指针
return 0;
printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);
return 1;
}
void print() //输出全部学生信息
{
student *ptr=head;
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查询模块
{
int method;//查询方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用来接收查询关键字
while(1)
{
printf("\n请选择查询方式");
printf("\n1.按学号查询");
printf("\n2.按姓名查询");
printf("\n3.按所在系查询");
printf("\n4.按所在班级查询");
printf("\n5.按所在年级查询");
printf("\n6.打印全部学生信息");
printf("\n7.返回主菜单\n");
scanf("%d",&method);
student *p=head,*temp;
switch(method)
{
case 1:
printf("\n请输入要查询的学号:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
LinePrint(p);
break;
case 2:
printf("\n请输入要查询的姓名:");
scanf("%s",name);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("\n请输入学生所在的系:");
scanf("%s",departm);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("\n请输入学生所在的班:");
scanf("%s",clss);
printf("\n请输入学生所在的年级:");
scanf("%s",grades);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 5:
printf("\n请输入学生所在的年级:");
scanf("%s",grades);
printf("\n学号 姓名 年龄 性别 系 班 年级 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 6:
print();
break;
case 7:
return;
default:
printf("很抱歉,暂无此查询方式!");
break;
}
}
}
void modify()//修改学生信息
{
char num[max];
student *p=head;
printf("\n请输入要修改的学生的学号:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n错误:没有此学生的信息!\n");
return;
}
LinePrint(p);
printf("\n请输入要修改的该学生的信息:");
printf("\n1.姓名");
printf("\n2.性别");
printf("\n3.年龄");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年级");
char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n请输入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}
LinePrint(p);
return;
}
void del()// 删除某学生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n请输入要删除的学生的学号:");
scanf("%s",num1);
while(p)//查找该学生所在的结点
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}
}//while
if(!p)
{
printf("\n不存在此学生的信息.");
return;
}
LinePrint(p);//输出该学生的信息
printf("\n请问真的要删除该学生的信息吗?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已经删除该学生的信息.");
}
return;
}
void sort() //排序模块。将学生记录按学号从小到大排列。用起泡排序算法实现
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//统计链表结点个数
{
count++;
s=s->next;
}
for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用来控制每轮起泡排序的终点,即每次把学号最小的结点移到倒数第i个结点
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr处于队头时
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr处于队头时
p=head;
else
p=p->next;
}
}
}
return;
}
void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}
int main()
{
int option;
printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n欢迎使用学生信息管理系统!\n");
//登录模块
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("\n连续登录三次不成功,退出!");
exit(0);
}
//系统界面
while(1)
{
printf("\n\n请选择需要的服务:");
printf("\n1.注册");
printf("\n2.查询");
printf("\n3.修改");
printf("\n4.删除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}
}
return 0;
}
求用C++编写一个成绩管理系统,题目如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>struct record
{
char xuehao[10];//学号
char name[20]; //姓名
char sex[3];//性别
int ke1;//数学
int ke2 ;//语文
int ke3;//英语
int pin;
}stu[50];
int k=1,n,m;void readfile();
void seek();
void insert();
void del();
void save();
void menu();
void seek()
{int i,j,item,flag;<br>char s1[20];<br>printf("------------------\n");<br>printf("1.按学号查询\n");<br>printf("2.退出本菜单\n");<br>printf("------------------\n");<br>while(1)<br>{ printf("请选择子菜单编号:");<br>scanf("%d",&item);<br>flag=0;<br>switch(item)<br>{<br>case 1:<br>printf("请输入要查询的学生的学号:\n");<br>scanf("%s",s1);<br>for(i=0;i<n;i++)<br>if(strcmp(stu[i].xuehao,s1)==0)<br>{ flag=1;<br>printf("该学生学号,姓名,性别,数学,语文,英语 分别为:\n");<br>printf(" %s %s %s %d %d %d",stu[i].xuehao,stu[i].name,<br>stu[i].sex,stu[i].ke1,stu[i].ke2,stu[i].ke3);<br>}
if(flag==0)
printf("该学号不存在!\n"); break;
case 2:return;
default:printf("请在1-2之间选择\n");
}
}
}
void insert()
{ int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].xuehao);
for(j=0;j<i;j++)
if(strcmp(stu[i].xuehao,stu[j].xuehao)==0)
{ printf("已有该学号,请检查后重新录入!\n");
flag=1;
break;
}
}
printf("请输入第 %d 个学生的姓名:",i+1);
scanf("%s",stu[i].name);
printf("\n请输入第 %d 个学生的性别:",i+1);
scanf("%s",stu[i].sex);
printf("\n请输入第 %d 个学生的数学成绩:",i+1);
scanf("%d",&stu[i].ke1);
printf("\n请输入第 %d 个学生的语文成绩:",i+1);
scanf("%d",&stu[i].ke2);
printf("\n请输入第 %d 个学生的英语成绩:",i+1);
scanf("%d",&stu[i].ke3);if(flag==0)
{ i=i;
i++;
}
}while(i<n+m);
n+=m;
printf("录入完毕!\n\n");
}void del()
{ int i,j,flag=0;
char s1[20];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].xuehao,s1)==0)
{ flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
{ printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
void readfile()
{
char buf[80],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s%s%s%d%d%d",stu[i].xuehao,stu[i].name,
stu[i].sex,&stu[i].ke1,&stu[i].ke2,&stu[i].ke3)==6)
{ i++;
i=i;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<m;i++)
{
fprintf(fp,"%s%s%d%d%d",stu[i].xuehao,stu[i].name,stu[i].sex,&stu[i].ke1,
&stu[i].ke2,&stu[i].ke3);
fclose(fp);
printf("已储存");
}
}
void paixu()
{
int i,j,k,t;
for(i=0;i<m;i++)
{
stu[i].pin=(stu[i].ke1+stu[i].ke2+stu[i].ke3)/3;
}
for(i=0;i<=m-2;i++)
{
k=i;
for(j=i+1;j<=m-1;j++)
if(stu[j].pin<stu[k].pin)
k=j;
if(k!=i)
{
t=stu[k].pin;
stu[k].pin=stu[i].pin;
stu[i].pin=t;
}
}
for(i=0;i<m;i++)
{printf("第 %d 个学生的姓名%s:",i+1,stu[i].name);<br> printf("\n第 %d 个学生的性别:%s",i+1,stu[i].sex);<br> printf("\n第 %d 个学生的数学成绩:%d",i+1,stu[i].ke1);<br> printf("\n第 %d 个学生的语文成绩:%d",i+1,stu[i].ke2);<br> printf("\n第 %d 个学生的英语成绩:%d",i+1,stu[i].ke3);<br> printf("\n第 %d 个学生的平均成绩:%d",i+1,stu[i].pin);<br> }
}
void menu()
{ int nub;
printf(" \n\n学生成绩管理系统\n\n");
printf("*****系统功能菜单*****\n");
printf("----------------------\n");
printf("1.输入学生信息\n");
printf("2.查询学生信息\n");
printf("3.按学号删除信息\n");
printf("4.读入学生信息\n");
printf("5.保存信息(要把修改保存到文件,退出程序前必须执行本项)\n");
printf("6.查询学生平均成绩信息\n");
printf("0.退出系统\n");
printf("----------------------\n");
printf("请选择菜单编号:");
scanf("%d",&nub);
switch(nub)
{
case 1:insert();break;
case 2:seek();break;
case 3:del();break;
case 4:readfile();break;
case 5:save();break;
case 6:paixu();break;
case 0:k=0;break;
default:printf("请在0-6之间选择\n");
}}
void main()
{
while(k)
menu();
}
//平均数是排序后,输出的,如果你不想直接输入,那就不要对每个学生进行选择排序了
c++ 学生成绩管理系统
呵呵,刚好我们有一个c++大型作业,学生成绩管理系统,就把我的代码帖给你,可以运行。
#include<iostream.h>
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
class?Stu//构建学生类
{
public:
friend?void?Input(Stu?stud[])?; friend?void?Statistic(Stu?stud[]); friend?void?Lookup(Stu?stud[])?; friend?void?Modify(Stu?stud[])?; friend?void?Delete(Stu?stud[])?; friend?void?Output(Stu?stud[])?; friend?void?Sort(Stu?stud[])?; friend?void?Insert(Stu?stud[])?; friend?void?Write(Stu?stud[],int?n);friend?int?Read(Stu?stud[]);
private:
char?class_0[20]; int?num; char?name[8]; float?elec; float?c_program; float?media; float?english; float?math; float?sport; float?polity; float?average; int?order;}stud[100];
void?Write(Stu?stud[],int?n)?//向文件中写入数据
{
fstream?myFile; myFile.open("student.dat",ios::out|ios::binary); if(!myFile) { cout<<"student.dat?can't?open!"<<endl; abort(); } int?count=n; myFile<<count<<endl<<endl; for(int?i=0;i<=count;i++) { myFile<<stud[i].class_0<<"?"<<stud[i].num<<"?"<<stud[i].name<<"?"<<stud[i].elec<<"?"<<stud[i].c_program<<"?"<<stud[i].media<<"?"<<stud[i].english<<"?"<<stud[i].math<<"?"<<stud[i].sport<<"?"<<stud[i].polity<<"?"<<stud[i].average<<endl;
} myFile.close();}
int?Read(Stu?stud[])?//从文件中读数据
{
fstream?myFile; myFile.open("student.dat",ios::in|ios::binary);if(!myFile)
{ cout<<"student.dat?can't?open!"<<endl; abort(); }int?count;
myFile.seekg(0);
myFile>>count;for(int?i=0;i<=count;i++)
{
myFile>>stud[i].class_0>>stud[i].num>>stud[i].name>>stud[i].elec>>stud[i].c_program>>stud[i].media>>stud[i].english>>stud[i].math>>stud[i].sport>>stud[i].polity>>stud[i].average;
}
myFile.close();
return?count?;
}
void?Input(Stu?stud[])?//---------------输入学生成绩
{
system("cls");?/*运行前清屏*/ int?i=0; int?flag; char?sign; cout<<endl<<"====>>?请输入学生成绩?<<===="<<endl; while(sign!='n'&&sign!='N')?/*判断*/? {? cout<<"?班级:";?/*交互输入*/? cin>>stud[i].class_0;?loop:
cout<<"?学号:";? cin>>stud[i].num; int?c=0; while(c<i) {c++;
if(stud[i].num==stud[i-c].num)
{
cout<<"?你输入的学号已经存在!请重新输入。"<<endl;
goto?loop;
}?
} cout<<"?姓名:?";? cin>>stud[i].name;? do{flag=0;
cout<<"?模拟电路:";?cin>>stud[i].elec;?
if(stud[i].elec>100?||stud[i].elec<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0; cout<<"?C++程序设计成绩:";? cin>>stud[i].c_program;?if(stud[i].c_program>100?||stud[i].c_program<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0;
cout<<"?软件工程成绩:";?
cin>>stud[i].media;?
if(stud[i].media>100?||stud[i].media<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0;
cout<<"?大学英语成绩:";?
cin>>stud[i].english;?
if(stud[i].english>100?||stud[i].english<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0;
cout<<"?大学物理成绩:";?
cin>>stud[i].math;if(stud[i].math>100?||stud[i].math<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0;
cout<<"?大学体育成绩:";?
cin>>stud[i].sport;?if(stud[i].sport>100?||stud[i].sport<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);?do{?
flag=0;
cout<<"?民族理论:";? cin>>stud[i].polity;?if(stud[i].polity>100?||stud[i].polity<1)?
cout<<"对不起,请输入1-100之间的数字!!\n";?
else?
flag=1;
}while(flag==0);? stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].media+stud[i].english+stud[i].math+stud[i].sport+stud[i].polity)/7;? cout<<"?平均分为:"<<stud[i].average<<endl;?cout<<"====>提示:是否继续写入学生成绩?(Y/N)";?
cin>>sign;?/*输入判断*/? i++;? }? Write(stud,i);}
void?Statistic(Stu?stud[])?//---------------统计学生数据
{
system("cls");?/*运行前清屏*/
int?n=Read(stud);
cout<<endl<<"====>>?输出学生统计数据?<<===="<<endl;cout<<"班级"<<"\t"<<"学号"<<"\t"<<"?姓名"<<"\t"<<"?平均分"<<endl;
for(int?i=0;i<n;i++) cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].average<<endl;system("pause");?
}
void?Lookup(Stu?stud[])?//---------------查找学生成绩?
{?
system("cls");?/*运行前清屏*/int?n=Read(stud);
int?s;? int?i=0; cout<<endl<<"====>>?查找学生成绩?<<===="<<endl; cout<<"请输入需要查找学生的学号:"<<endl;? cin>>s;? while((stud[i].num-s)!=0&&i<n)?i++;?/*查找判断*/? if(i==n)? {? cout<<"=====>提示:对不起,无法找到该学生的信息!"<<endl;?/*输入失败信息*/? }? else { cout<<"---------------------------"<<endl;? cout<<"班级:"<<stud[i].class_0<<endl;?/*输出该学生信息*/? cout<<"学号:"<<stud[i].num<<endl;? cout<<"姓名:"<<stud[i].name<<endl;? cout<<"模拟电路:"<<stud[i].elec<<endl;? cout<<"C++程序设计:"<<stud[i].c_program<<endl;? cout<<"软件工程:"<<stud[i].media<<endl;? cout<<"大学英语:"<<stud[i].english<<endl;? cout<<"大学物理:"<<stud[i].math<<endl;? cout<<"大学体育:"<<stud[i].sport<<endl;? cout<<"民族理论:"<<stud[i].polity<<endl;? cout<<"平均分:"<<stud[i].average<<endl; }}
void?Modify(Stu?stud[])//---------------修改学生成绩
{?
system("cls");?/*运行前清屏*/int?n=Read(stud);
int?s;? int?i=0; cout<<endl<<"====>>?修改学生成绩?<<===="<<endl; cout<<"请输入需要修改成绩学生的学号:"<<endl;? cin>>s;? while((stud[i].num-s)!=0&&i<n)?i++;?/*查找判断*/? if(i==n)? {? cout<<"=====>提示:对不起,无该学生的成绩……"<<endl;?/*输入失败信息*/ }? else { cout<<"----------该学生的信息----------"<<endl;?/*格式头*/? cout<<"班级"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"电子"<<"\t"<<"c++"<<"\t"<<"?多媒体"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"体育"<<"\t"<<"政治"<<"\t"<<"平均分"<<endl; cout<<"---------------------------------"<<endl;? cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].elec<<"\t"<<stud[i].c_program<<"\t"<<stud[i].media<<"\t"<<stud[i].english<<"\t"<<stud[i].math<<"\t"<<stud[i].sport<<"\t"<<stud[i].polity<<"\t"<<stud[i].average<<endl; cout<<"请重新输入该学生的信息"<<endl; cout<<"班级:"<<endl;?/*交互输入*/? cin>>stud[i].class_0;? cout<<"学号:"<<endl;? cin>>stud[i].num;? cout<<"姓名:"<<endl;? cin>>stud[i].name;? cout<<"模拟电路成绩:"<<endl;? cin>>stud[i].elec; cout<<"C++程序设计成绩:"<<endl;? cin>>stud[i].c_program;? cout<<"软件工程成绩:"<<endl;? cin>>stud[i].media;? cout<<"大学英语成绩:"<<endl;? cin>>stud[i].english;? cout<<"大学物理成绩:"<<endl;? cin>>stud[i].math; cout<<"大学体育成绩:"<<endl;? cin>>stud[i].sport;? cout<<"民族理论成绩:"<<endl;? cin>>stud[i].polity;? stud[i].average=(stud[i].elec+stud[i].c_program+stud[i].media+stud[i].english+stud[i].math+stud[i].sport+stud[i].polity)/7;? cout<<"平均分为:"<<stud[i].average<<endl; char?c; cout<<"是否保存数据?(y/n)"<<endl; cin>>c; if(c!='n'&&c!='N') Write(stud,n); }}
void?Delete(Stu?stud[])?//---------------按学号查找,删除学生信息?
{
system("cls");?/*运行前清屏*/? int?n=Read(stud); int?s;? int?i=0,j; cout<<endl<<"====>>?删除学生成绩?<<===="<<endl; cout<<"请输入需要删除学生的学号:"<<endl;?/*交互式问寻*/? cin>>s;? while((stud[i].num-s)!=0&&i<n)?i++;?/*查找判断*/? if(i==n)? {? cout<<"====>提示:对不起,无法找到该学生……"<<endl;?/*返回失败信息*/? }? else { for(j=i;j<n-1;j++)?/*删除操作*/? {?strcpy(stud[j].class_0,stud[j+1].class_0);?
stud[j].num=stud[j+1].num;?
strcpy(stud[j].name,stud[j+1].name);?
stud[j].elec=stud[j+1].elec;?
stud[j].c_program=stud[j+1].c_program;?
stud[j].media=stud[j+1].media;?
stud[j].english=stud[j+1].english;?
stud[j].math=stud[j+1].math;?
stud[j].sport=stud[j+1].sport;?
stud[j].polity=stud[j+1].polity;
stud[j].average=stud[j+1].average;
} cout<<"====>提示:已成功删除!"<<endl;?/*返回成功信息*/ }? Write(stud,n-1);}?
void?Insert(Stu?stud[])?//---------------增加学生成绩?
{?
system("cls");?/*运行前清屏*/ int?n=Read(stud); char?s; cout<<endl<<"====>>?增加学生成绩<<===="<<endl; while(s!='n'&&s!='N') { cout<<"班级:"<<endl;?/*交互输入*/?cin>>stud[n].class_0;?
cout<<"学号:";?
cin>>stud[n].num;?
cout<<"姓名:";?
cin>>stud[n].name;?
cout<<"模拟电路成绩:";? cin>>stud[n].elec;? cout<<"C++程序设计成绩:";? cin>>stud[n].c_program;? cout<<"软件工程成绩:";? cin>>stud[n].media;? cout<<"大学英语成绩:";? cin>>stud[n].english;? cout<<"大学物理成绩:";? cin>>stud[n].math;? cout<<"大学体育成绩:";? cin>>stud[n].sport;? cout<<"民族理论成绩:";? cin>>stud[n].polity;? stud[n].average=(stud[n].elec+stud[n].c_program+stud[n].media+stud[n].english+?stud[n].math+stud[n].sport+stud[n].polity)/7;? cout<<"平均分"<<stud[n].average; n++;? cout<<"=====>提示:插入成功!"<<endl;?/*返回成功信息*/ cout<<"是否继续输入(y/n)"<<endl; cin>>s; } Write(stud,n);?}
void?Sort(Stu?stud[])?//---------------按平均分对学生成绩记录项进行降序排序?
{
system("cls");?/*运行前清屏*/? int?i,j,k;? float?s;? char?t[20]; cout<<endl<<"====>>?降序排序成绩?<<===="<<endl; int?n=Read(stud); for(i=0;i<n-1;i++)?/*冒泡法排序*/? for(j=0;j<n-1-i;j++)?if(stud[j].average<stud[j+1].average)?
{?
strcpy(t,stud[j+1].class_0);?
strcpy(stud[j+1].class_0,stud[j].class_0);?
strcpy(stud[j].class_0,t);?
k=stud[j+1].num;?
stud[j+1].num=stud[j].num;?
stud[j].num=k;?
strcpy(t,stud[j+1].name);?
strcpy(stud[j+1].name,stud[j].name);?
strcpy(stud[j].name,t);?
s=stud[j+1].elec;?
stud[j+1].elec=stud[j].elec;?
stud[j].elec=s;?
s=stud[j+1].c_program;?
stud[j+1].c_program=stud[j].c_program;?
stud[j].c_program=s;?
s=stud[j+1].media;?
stud[j+1].media=stud[j].media;?
stud[j].media=s;?
s=stud[j+1].english;?
stud[j+1].english=stud[j].english;?
stud[j].english=s;?
s=stud[j+1].math;?
stud[j+1].math=stud[j].math;?
stud[j].math=s;?
s=stud[j+1].sport;?
stud[j+1].sport=stud[j].sport;?
stud[j].sport=s;?
s=stud[j+1].polity;?
stud[j+1].polity=stud[j].polity;?
stud[j].polity=s;?
s=stud[j+1].average;?
stud[j+1].average=stud[j].average;?
stud[j].average=s;?
}?
cout<<"----------------------------------------------------"<<endl;?/*格式头*/? cout<<"班级"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"电子"<<"\t"<<"C++"<<"\t"<<"多媒体"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"体育"<<"\t"<<"政治"<<"\t"<<"平均分"<<"\t"<<"名次"<<endl;? cout<<"----------------------------------------------------"<<endl;?for(i=0;i<n;i++)?/*循环输入*/?
{?stud[i].order=i+1;
cout<<stud[i].class_0<<"\t"<<stud[i].num<<"\t"<<stud[i].name<<"\t"<<stud[i].elec<<"\t"<<stud[i].c_program<<"\t"<<stud[i].media<<"\t?"<<stud[i].english<<"?\t"<<?stud[i].math<<"\t"<<stud[i].sport<<"\t?"<<stud[i].polity<<"\t"<<stud[i].average<<"\t"<<stud[i].order<<endl;?}?
Write(stud,n);
}
void?Output(Stu?stud[])?//---------------显示全部学生成绩?
{?
system("cls");?/*运行前清屏*/
int?n=Read(stud); cout<<endl<<"====>>?显示全部学生成绩?<<===="<<endl; if(!stud) cout<<"没有记录";? else{
cout<<"----------------------------------------------------"<<endl;?/*格式头*/? cout<<"班级"<<"\t"<<"学号"<<"\t"<<"姓名"<<"\t"<<"电子"<<"\t"<<"c++"<<"\t"<<"多媒体"<<"\t"<<"英语"<<"\t"<<"数学"<<"\t"<<"体育"<<"\t"<<"政治"<<"\t"<<"平均分"<<endl; cout<<"------------------------------------------------"<<endl;? for(int?i=0;i<n;i++)?/*循环输入*/? {? cout<<stud[i].class_0<<"\t?"<<stud[i].num<<"\t?"<<stud[i].name<<"\t?"<<stud[i].elec<<"?\t"<<stud[i].c_program<<"\t?"<<stud[i].media<<"\t?"<<stud[i].english<<"\t?"<<?stud[i].math<<"?\t"<<stud[i].sport<<"\t"<<stud[i].polity<<"\t"<<stud[i].average<<endl;? }?cout<<"--------------------------------------------------------"<<endl;
}?}
int?menu()?/*菜单函数*/?
{
char?c;?
do? {?system("cls");?/*运行前清屏*/?
cout<<"?-----------------<<欢迎您使用学生成绩管理系统--------------\n"<<endl;?
cout<<"?*******************************************\n\n"<<endl;/*菜单选择*/?
cout<<"1、输入学生成绩"<<endl;? cout<<"2、显示统计数据"<<endl;? cout<<"3、查找学生成绩"<<endl;? cout<<"4、修改学生成绩"<<endl;? cout<<"5、删除学生成绩"<<endl;? cout<<"6、插入学生成绩"<<endl;? cout<<"7、按平均分降序排列"<<endl;? cout<<"8、显示全部学生成绩"<<endl;? cout<<"0、退出本系统"<<endl<<endl;? cout<<"*********************************************"<<endl;? cout<<"请你选择操作(0-8):"<<endl;? c=getchar();?/*读入选择*/? }? while(c<'0'||c>'8');? return(c-'0');?/*返回选择*/?}?
void?main()?/*主函数*/?
{?
for(;;)? {? switch(menu())?/*选择判断*/? {? case?1:?Input(stud);/*输入学生成绩*/
break;?
case?2:?Statistic(stud);?/*输出学生统计数据*/?
break;
case?3:Lookup(stud);?/*查找学生成绩*/
cout<<"\t\t\t";?
system("pause");?
break;?
case?4:?Modify(stud);?/*修改学生成绩*/
cout<<"\t\t\t";?
system("pause");?
break;?
case?5:?Delete(stud);?/*按学号查找,删除学生信息*/?
cout<<"\t\t\t";?
system("pause");?
break;?
case?6:?Insert(stud);/*增加学生成绩*/?
cout<<"\t\t\t";?
system("pause");?
break;?
case?7:?Sort(stud);?/*按平均分对成绩记录项进行降序排序*/?
cout<<"\t\t\t";?
system("pause");?
break;?
case?8:?Output(stud);?/*显示全部学生成绩*/
cout<<"\t\t\t";?
system("pause");?
break;?
case?0:?cout<<endl<<"?================================<<感谢您使用学生成绩管理系统>>===============================\n"<<endl;?/*结束程序*/?
cout<<"\t\t\t";?
system("pause");?
exit(0);?
}? }?}
用C++编写一个学生成绩管理系统,并编写一个友元函数能完成对成绩进行从高到低排序
这是我刚改过的代码,还添加了求平均分的功能
#include<iostream.h>
#include<string.h>
#include<fstream.h>
class stu
{
char name[20];
int ba;
double math,number,chinese,english,average,sum;
public:
stu()
{
}
stu(char n[20],int ban,double nu,double ma,double chin,double eng)
{
strcpy(name,n);
ba=ban;
number=nu;
math=ma;
chinese=chin;
english=eng;
}
double getsum()
{
sum=chinese+english+math;
return sum;
}
double getaver()
{
average=getsum()/3;
return average;
}
friend void main();
};
void main()
{
cout<<"(0)数据录入 (1)增加人员"<<endl;
cout<<"(2)删除人员 (3)修改数据"<<endl;
cout<<"(4)按学号查询 (5)按姓名查询"<<endl;
cout<<"(6)输出所有学生的数据 (7)按总分查询排名"<<endl;
cout<<"(8)按语文查询排名 (9)按数学查询排名"<<endl;
cout<<"(y)按英语查询排名 "<<endl;
cout<<"选择相关操作请输入相对的括号里的阿拉伯数字或字母!"<<endl;
char p;char w;
stu *s[50];
ofstream *file[50];
int i=0;
int j=0;
bool flag2=0;
do
{
cin>>p;
if((p>='0'&&p<='9'))
flag2=1;
else
cout<<"指令错误!请重新输入:"<<endl;
}while(flag2==0);
do{
switch(p)
{
case '0':
{
char c;
char name[20];int ba ;double number, math,chinese,english;
do{
cout<<"请输入姓名"<<endl;
cin>>name;
cout<<"请输入班级:"<<endl;
cin>>ba;
cout<<"请输入您要增加的学生的学号:"<<endl;
cin>>number;
cout<<"请输入数学成绩:"<<endl;
cin>>math;
cout<<"请输入语文成绩:"<<endl;
cin>>chinese;
cout<<"请输入外语成绩:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"班级"<<ba<<"学号"<<number<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl;
j++;
s[i]=new stu(name,ba,number, math, chinese, english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
do
{
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
else
flag2=1;
}while(flag2==0);
}while(c=='y');
break;
}
case '1':
{
char name[20];int ba;double number,math,chinese,english;
char c;
do
{
cout<<"请输入您要增加的学生的姓名:"<<endl;
cin>>name;
cout<<"请输入要增加的学生的班级:"<<endl;
cin>>ba;
cout<<"请输入您要增加的学生的学号:"<<endl;
cin>>number;
cout<<"请输入数学成绩:"<<endl;
cin>>math;
cout<<"请输入语文成绩:"<<endl;
cin>>chinese;
cout<<"请输入外语成绩:"<<endl;
cin>>english;
file[j]=new ofstream("d:\\document",ios::ate);
*file[j]<<"姓名"<<name<<"班级"<<ba<<"学号"<<number<<"数学成绩"<<math<<"语文成绩"<<chinese<<"外语成绩"<<english<<endl;
j++;
s[i]=new stu(name, ba,number,math, chinese, english);
i++;
cout<<"数据录入成功,想继续录入吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '2':
{
char name[20];bool flag3=0;char c;
do{
cout<<"请输入您要删除的学生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag3=1;
i--;
do{
s[h]=s[h+1];
h++;
}while(h<=i);
}
}
if(flag3==0)
cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
cout<<"要继续删除吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '3':
{
char name[20];double mat,chin,eng;flag2=0;
char c;
do
{
cout<<"请输入您要修改的学生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
flag2=1;
cout<<"请输入新的数学成绩:"<<endl;
cin>>mat;
cout<<"请输入新的语文成绩:"<<endl;
cin>>chin;
cout<<"请输入新的外语成绩:"<<endl;
cin>>eng;
s[h]->chinese=chin;
s[h]->math=mat;
s[h]->english=eng;
cout<<"数据修改成功!";
}
}
if(flag2==0)
{
cout<<"您要修改的学生本来就不存在!请检查重新输入!"<<endl;
}
cout<<"想继续修改吗(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}while(c=='y');
break;
}
case '4':
{
double t;char c;
do
{
int flag1=0;
cout<<"请输入你要查询学生的学号"<<endl;
cin>>t;
for(int q=0;q<i;q++)
{
if(s[q]->number==t)
{
flag1=1;
cout<<"您要查询的学生是:"<<(*s[q]).name
<<"数学成绩为:"<<s[q]->math
<<"语文成绩为:"<<s[q]->chinese
<<"英语成绩为:"<<s[q]->english
<<"总分为:"<<s[q]->getsum()
<<endl;
}
}
if(flag1==0)
cout<<"对不起!您要查询的学生不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '5':
{
char n[20];int j=0;char c;
do{
int flag=0;
cout<<"请输入你要查询的学生姓名"<<endl;
cin>>n;
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<<"的总成绩成绩是"<<(*s[j]).getsum()
<<"班级:"<<" "<<s[j]->ba
<<"语文:"<<" "<<s[j]->chinese
<<"数学:"<<" "<<s[j]->math
<<"外语:"<<" "<<s[j]->english
<<"平均成绩是:"<<(*s[j]).getaver()
<<endl;
}
}
if(flag==0)
cout<<"对不起!您要查询的学生不存在!"<<endl;
cout<<"您想继续查询吗?(y/n)"<<endl;
cin>>c;
if(c!='y'&&c!='n')
{
cout<<"指令错误!请重新输入!"<<endl;
cin>>c;
}
}
while(c=='y');
break;
}
case '6':
{
cout<<"本系统所有学生数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese<<"数学:"
<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<(*s[k]).getsum()
<<"平均分:"<<" "<<(*s[k]).getaver()
<<endl;
}
break;
}
case '7':
{
int t;stu b;
cout<<"本系统所有学生总分排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->getsum())<(s[y]->getsum()))
t=y;
if(t!=x)
{
b=*s[x];
*s[x]=*s[t];
*s[t]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->sum;
o2=s[0]->sum;
}
cout<<"总分最高分"<<o2<<endl
<<"总分最低分"<<o1<<endl
<<endl;
break;
}
case '8':
{
int t;stu b;
cout<<"本系统所有学生语文排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->chinese)<(s[y]->chinese))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1 ,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->chinese;
o2=s[0]->chinese;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"语文最高分"<<o2<<endl
<<"语文最低分"<<o1<<endl
<<"语文及格率"<<v3<<"%"
<<endl;
break;
}
case '9':
{
int t;stu b;
cout<<"本系统所有学生数学排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->math)<(s[y]->math))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<<"语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->math;
o2=s[0]->math;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"数学最高分"<<o2<<endl
<<"数学最低分"<<o1<<endl
<<"数学及格率"<<v3<<"%"
<<endl;
break;
}
case 'y':
{
int t;stu b;
cout<<"本系统所有学生英语排名如下:"<<endl;
for(int x=0;x<i-1;x++)
{
t=x;
for(int y=x+1;y<i;y++)
{
if((s[t]->english)<(s[y]->english))
t=y;
if(t!=x)
{
b=*s[t];
*s[t]=*s[x];
*s[x]=b;
}
}
}
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!";
double o1,o2;
for(int k=0;k<i;k++)
{
cout<<k+1<<" "<<"姓名:"<<" "<<s[k]->name
<<"班级"<<s[k]->ba
<<"学号"<<s[k]->number
<< "语文:"<<" "<<s[k]->chinese
<<"数学:"<<" "<<s[k]->math
<<"外语:"<<" "<<s[k]->english
<<"总分:"<<" "<<s[k]->getsum()
<<"平均分:"<<" "<<s[k]->getaver()
<<endl;
o1=s[k]->english;
o2=s[0]->english;
}
int v1=0,v2=0;double v3;
for(v2=0;v2<=i-1;v2++)
{
if(s[v2]->english>=60)
v1++;
}
v3=(v1*100)/v2;
cout<<"英语最高分"<<o2<<endl
<<"英语最低分"<<o1<<endl
<<"英语及格率"<<v3<<"%"
<<endl;
}
break;
}
cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
bool flag4=0;
do
{
cin>>w;
if(w!='y'&&w!='n')
cout<<"指令错误!请重新输入!"<<endl;
else
flag4=1;
}while(flag4==0);
if(w=='y')
cout<<" 请输入操作代码: "<<endl;
cout<<"0 录入 1 增加人员 2 删除人员"<<endl;
cout<<"3 修改数据 4 按学号查询 5 按姓名查询"<<endl;
cout<<"6 显示所有成员数据 7 按总分排名 8 按语文排名"<<endl;
cout<<"9 按数学排名 y按英语排名"<<endl;
cin>>p;
}while(w=='y');
}
#include<iostream>
#include<fstream>
#include<string> //控制字符串的头文件
using namespace std;
class student//建立同学录的一个类
{
//头接点
public:
char name[20];
int num;
int age;
char sex;
double en;
double ma;
double com;
double ave;
student *next;
student *stu;
student(); //构造函数
void display()
{
cout<<"名字: "<<name<<" "<<"学号: "<<num<<" "<<"性别: "<<sex<<"年龄: "<<age<<"英语: "<<en<<" "<<"数学: "<<ma<<" "<<"计算机: "<<com<<endl;
}
student (char n[20],int nu, int ag, char se,double e,double m,double c,double av);
~ student ();
void Set();//添加
void Delete();//删除
void Alter();//修改
void List();//显示
void aver();
void ssearch();//查询
// void RearchN();
// void RearchNU();
void staxis(); //排序
void ssave(); //保存
void sload(); //读取
//排序函数
void pnumb();
void peng();
void pmat();
void pcomp();
friend void caozuo(int);
};
void student::aver()
{
double z;
z=en+ma+com;
ave=z/3;
}
student::student()//构造函数
{
strcpy(name, "nomame");
num=0;
sex='M';
age=0;
double en=0;
double ma=0;
double com=0;
double ave=0;
}
student::student (char n[20],int nu, int ag, char se,double e,double m,double c,double av)
{
strcpy(name, n);
num=nu;
sex=se;
age=ag;
en=e;
ma=m;
com=c;
ave=av;
}
student::~student(){};
student *s[50];
int i=0;
int j=0;
void student::Set()
{
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入学号:"<<endl;
cin>>num;
cout<<"请输入年龄:"<<endl;
cin>>age;
cout<<"请输入性别:"<<endl;
cin>>sex;
cout<<"请输入英语成绩:"<<endl;
cin>>en;
cout<<"请输入数学成绩:"<<endl;
cin>>ma;
cout<<"请输入计算机成绩:"<<endl;
cin>>com;
j++;
s[i]=new student(name,num, age, sex,en,ma,com,ave);
i++;
}
void student:: Delete() //(2)删除人员(Delete)
{
cout<<"请输入您要删除的学生姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
i--;
s[h]=s[h+1];
h++;
}
else cout<<"您要求删除的对象本来就不存在!请检查输入的正确性!";
}
}
void student::Alter() //(3)修改数据(Alter)
{
cout<<"请输入您要修改的学生的姓名:"<<endl;
cin>>name;
for(int h=0;h<i;h++)
{
if(strcmp(name,s[h]->name)==0)
{
int nu;
int ag;
char se;
double e;
double m;
double c;
cout<<"请输入学号: "<<endl;
cin>>nu;
cout<<"请输入年龄:"<<endl;
cin>>ag;
cout<<"请输入性别:"<<endl;
cin>>se;
cout<<"请输入英语成绩:"<<endl;
cin>>e;
cout<<"请输入数学成绩:"<<endl;
cin>> m;
cout<<"请输入计算机成绩:"<<endl;
cin>>c;
s[h]->num=nu;
s[h]->age=ag;
s[h]->sex=se;
s[h]->en=e;
s[h]->ma=m;
s[h]->com=c;
cout<<"数据修改成功!";
break;
}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
break;
}
}
}
void student::List() //(4)显示记录(List)
{
cout<<"本系统所有通讯录的数据如下:"<<endl;
if(i==0)
cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl;
for(int k=0;k<i;k++)
{
s[k]->display();
}
}
void student::ssearch()//查询
{
//system("cls");
cout<<"\n** 查询学生信息 **\n"<<endl;
cout<<"请输入查询方式:"<<endl;
cout<<"1.按学号查询"<<endl;
cout<<"2.按姓名查询"<<endl;
cout<<"3.返回"<<endl;
char c;
cin>>c;
switch (c)
{
case '1':
{ int n;
if(i==0)
{
cout<<"管理系统中没有输入数据!"<<endl; exit(0);
}
cout<<"请输入你要查询的学生的学号"<<endl;
cin>>n;
for(int j=0;j<i;j++)
{
if(s[j]->num==n)
{
cout<<"您要查询的学生是:"<<s[j]->name<<endl;
cout<<"年龄: "<<s[j]->age<<" "<<"性别: "<<s[j]->sex<<" "<<"英语:"<<s[j]->en<<" "<<"数学:"<<s[j]->ma<<" "<<"计算机:"<<s[j]->com<<"平均分:"<<endl;
break;
}
}
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
}
break;
}
case '2':
{ if(i==0)
{ cout<<"管理系统中没有录入数据或者数据已经被删除!"<<endl; exit(0); }
cout<<"请输入你要查询的学生姓名"<<endl;
cin>>name;
for(int j=0;j<i;j++)
{
if(strcmp(name,s[j]->name)==0)
{
cout<<"您要查询的学生是:"<<stu[j].name<<endl;
//cout<<"学号:"<<stu[j].num
cout<<"学号:"<<stu[j].num<<" "<<"年龄: "<<stu[j].age<<" "<<"性别: "<<stu[j].sex<<" "<<"英语:"<<stu[j].en<<" "<<"数学:"<<stu[j].ma<<" "<<"计算机:"<<stu[j].com<<"平均分:"<<endl;
break;
};
if (i == j)
{
cout<<"对不起!您要查询的学生不存在!"<<endl;
}
}
break;}
case '3':
return ;
}
}
void student::pnumb()//按学号排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->num>p1->next->num) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->num) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}
void student::pmat() //按数学成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->ma>p1->next->ma) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->ma>p1->next->ma)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}
void student::pcomp()//按语文成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{n++; p1=p1->next;}
cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->com>p1->next->com) // 如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{
p2=p1;
p1=p1->next;
if(p1->com>p1->next->com)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{
p1->display();
p1=p1->next;
}while(p1);
}
void student::peng()//按英语成绩排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"条信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->en>p1->next->en) // 如果头结点大于第二个的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //头结点交换
stu=p2;
}
p1=stu;
while(p1->next->next) //中间的交换
{ p2=p1;
p1=p1->next;
if(p1->en>p1->next->en)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交换
}
}
}
p1=stu;
do
{ p1->display();
p1=p1->next;
}while(p1);
}
void student::staxis()//排序
{
char c;
cout<<"请选择以何种方式排序:"<<endl;
cout<<"1:以学号排序"<<endl;
cout<<"2:以英语成绩排序"<<endl;
cout<<"3:以数学成绩排序"<<endl;
cout<<"4:以计算机成绩排序"<<endl;
cout<<"5:返回"<<endl;
cout<<"请选择(1-5):"<<endl;
cin>>c;
switch (c)
{
case '1':pnumb(); break;
case '2':peng(); break;
case '3':pmat(); break;
case '4':pcomp(); break;
case '5':return;
}
}
void student::ssave() //保存到文件
{
char c;
cout<<"\n保存学生信息(将覆盖原文件),是否继续?[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;
ofstream tfile("date.txt",ios::binary);
student *p=stu;
while(p)// 写入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->en<<"\t"<<p->ma<<"\t"<<p->com<<"\t"<<p->ave;
tfile<<endl;
p=p->next;
}
tfile.close();
cout<<"保存完毕..."<<endl;
}
void student::sload() //读取
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}
ifstream tfile("date.txt",ios::binary);
char name1[20];
int num1;
char sex;
double en1,ma1,com1,ave1,age1;
tfile>>name1>>num1>>en1>>ma1>>com1>>ave1>>sex>>age1;
while(tfile.good())
{
//创建学生接点
student *s;
s=stu;
s=new student(name1,num1,age1,sex,en1,ma1,com1,ave1);
s->next=0;
s->ave=stu->ave;
if(stu) //若已经存在结点
{
student *p2;
p2=stu;
while(p2->next) //查找尾结点
{
p2=p2->next;
}
p2->next=s; //连接
}
else //若不存在结点(表空)
{
stu=s; //连接
}
tfile>>name1>>num1>>en1>>ma1>>com1>>ave1;
}
tfile.close();
cout<<"\n学生信息已经装入...\n";
}
void caozuo(int p)
{
student t;
switch(p)
{
case 0:t.Set();break;
case 1:t.Set();break;
case 2:t.Delete();break;
case 3:t.Alter();break;
case 4:t.List();break;
case 5:t.ssearch();//查询
case 6:t.staxis(); //排序
case 7:exit(0);break;
}
}
void main()
{
char w;
do
{
cout<<"请输入操作代码( 成绩录入/0 增加人员/1 删除人员/2 修改数据/3 显示记录/4 查询/5 排序/6 退出/7)"<<endl;
int a;
cin>>a;
caozuo(a);
cout<<"您想继续进行其他操作吗?(y/n)"<<endl;
cin>>w;
}while(w=='y');
} //利用while语句又回到了前面的循环
以前帮同学写的,贴出来供大家参考,基本满足楼主要求,希望对楼主有帮助,呵呵...