表格形式的学生成绩管理系统模板_第1页
表格形式的学生成绩管理系统模板_第2页
表格形式的学生成绩管理系统模板_第3页
表格形式的学生成绩管理系统模板_第4页
表格形式的学生成绩管理系统模板_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include"stdio.h"/*I/O函数*/#include"stdlib.h"/*其它说明*/#include"string.h"/*字符串函数*/#include"conio.h"/*屏幕操作函数*/#include"ctype.h"/*字符操作函数*/#defineN3/*定义常数*/#defineM30/*定义数据结构*/typedefstructz1{charno[11];charname[15];intscore[N];floatsum;floataverage;intorder;structz1*next;}STUDENT;/*菜单函数,返回值为整数*/menu_select(){char*menu[]={"***************MENU***************",/*定义菜单字符串数组*/"1.Enterlist",/*输入统计*/"2.Printlist",/*显示单链表中全部统计*/"3.Sorttomakenewfile",/*排序*/"4.Insertrecordtolist",/*插入统计到表中*/"5.Deletearecordfromlist",/*从表中删除统计*/"6.Savethefile",/*将单链表中统计保留到文件中*/"7.Loadthefile",/*从文件中读入统计*/"8.Quit",/*退出*//*屏幕调整,没有实际意义*/"***********************************",};chars[3];/*以字符形式保留选择号*/intc,i;/*定义整形变量*/textbackground(GREEN);/*设置背景颜色为黄色*/gotoxy(1,25);/*移动光标*/printf("Pressanykeyentermenu......\n");/*压任一键进入主菜单*/getch();/*输入任一键*/clrscr();/*清屏*/for(i=0;i<16;i++)/*输出主菜单数组*/{gotoxy(10,i+1);cprintf("%s",menu[i]);}window(1,1,80,25);/*恢复原窗口大小*/gotoxy(10,21);/*移动光标*/do{printf("\nEnteryouchoice(1-8):");/*在菜单窗口外显示提醒信息*/scanf("%s",s);/*输入选择项*/c=atoi(s);/*将输入字符串转化为整形数*/}while(c<0||c>9);/*选择项不在0~9之间重输*/returnc;/*返回选择项,主程序依据该数调用对应函数*/}/*初始化链表*/STUDENT*init(){returnNULL;}/*创建链表,完成数据录入功效*/STUDENT*create(){inti;ints;STUDENT*h=NULL,*info;/*STUDENT指向结构体指针*/for(;;){info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/if(!info)/*假如指针info为空*/{printf("\nOutofmemory");/*输出内存溢出*/returnNULL;/*返回空指针*/}printf("Inputimformationasfollow.\n");printf("Press'#'after'EnterNO'toendtheinput.\n");inputs("EnterNO.:",info->no,11);/*输入学号并校验*/if(info->no[0]=='#')break;/*假如学号首字符为#则结束输入*/inputs("Entername:",info->name,15);/*输入姓名,并进行校验*/printf("Pleaseinput%dscores\n",N);/*提醒开始输入成绩*/s=0;/*计算每个学生总分,初值为0*/for(i=0;i<N;i++)/*N门课程循环N次*/{do{printf("score%d:",i+1);/*提醒输入第几门课程*/scanf("%d",&info->score[i]);/*输入成绩*/if(info->score[i]>100||info->score[i]<0)/*确保成绩在0~100之间*/printf("Baddata,repeatinput\n");/*犯错提醒信息*/}while(info->score[i]>100||info->score[i]<0);s=s+info->score[i];/*累加各门课程成绩*/}info->sum=s;/*将总分保留*/info->average=(float)s/N;/*求出平均值*/info->order=0;/*未排序前此值为0*/info->next=h;/*将头结点做为新输入结点后继结点*/h=info;/*新输入结点为新头结点*//*没排序前,后输入数据将排在最上*/}return(h);/*返回头指针*/}/*自定义输入控制函数inputs*/inputs(char*prompt,char*s,intcount){charp[255];do{printf(prompt);/*显示提醒信息*/scanf("%s",p);/*输入字符串*/if(strlen(p)>count)printf("\nToolong!\n");/*进行长度校验,超出count值重输入*/}while(strlen(p)>count);strcpy(s,p);/*将输入字符串拷贝到字符串s中*/}/*显示模块*/voidprint(STUDENT*h){inti=0;/*统计统计条数*/STUDENT*p;/*移动指针*/clrscr();/*清屏*/p=h;/*初值为头指针*/printf("\n\n\n----------------------------------STUDENT---------------------------------\n");printf("|rec|NO.|name|english|math|computer|ave|order|\n");printf("|---|----------|---------------|--------|------|-----------|------|------|\n");while(p!=NULL){i++;if(i%15==0){getch();clrscr();printf("\n\n\n\n");}/*不然什么也不做*/elseprintf("|%2d|%-10s|%-15s|%8d|%6d|%11d|%5.2f|%5d|\n",i,p->no,p->name,p->score[0],p->score[1],p->score[2],p->average,p->order);p=p->next;}printf("---------------------------------end--------------------------------------\n");}/*排序模块*/STUDENT*sort(STUDENT*h){inti=0;/*用来保留名次*/STUDENT*p,*q,*t,*h1;/*定义临时指针*/h1=h->next;/*将原表头指针所指下一个结点作头指针*/h->next=NULL;/*断开原来链表头结点与其它结点连接*/while(h1!=NULL)/*当原表不为空时,进行排序*/{t=h1;/*取原表头结点*/h1=h1->next;/*原表头结点指针后移*/p=h;/*设定移动指针p,从头指针开始*/q=h;/*设定移动指针q做为p前驱,初值为头指针*/while(t->sum<p->sum&&p!=NULL)/*作总分比较*/{q=p;/*待插入点值小,则新表指针后移*/p=p->next;}if(p==q)/*p==q,上面while没有实施,也即插入点大于头指针,此点应排在首位*/{t->next=p;/*待排序点后继为p*/h=t;/*新头结点为待排序点*/}else/*待排序点应插入在q和p之间,如p为空则是尾部*/{t->next=p;/*t后继是p*/q->next=t;/*q后继是t*/}}p=h;/*已排好序头指针赋给p*/while(p!=NULL)/*给予各组数据排序号*/{i++;/*结点序号*/p->order=i;/*将名次赋值*/p=p->next;/*指针后移*/}printf("Sortsucess!!!\n");/*排序成功*/return(h);/*返回头指针*/}STUDENT*insert(STUDENT*h){STUDENT*p,*q,*info,*k;/*p指向插入位置,q是其前驱,info指新插入统计*/ints1,i,n=0;printf("\npleasenewrecord\n");info=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/if(!info){printf("\Outofmemory");/*如没有申请到,内存溢出*/returnNULL;/*返回空指针*/}inputs("EnterNO.:",info->no,11);/*以下是待插入数据录入和处理,具体同创建模块同*/inputs("Entername:",info->name,15);printf("Pleaseinput%dscore\n",N);s1=0;for(i=0;i<N;i++){do{printf("score%d:",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)printf("baddata,repeatinput\n");}while(info->score[i]>100||info->score[i]<0);s1=s1+info->score[i];}info->sum=s1;info->average=(float)s1/N;info->next=NULL;/*设后继指针为空*/p=h;/*将指针赋值给p*/q=h;/*将指针赋值给q*/if(h==NULL)/*链表为空*/{h=info;info->next=NULL;}else{while((info->sum<p->sum)&&(p->next!=NULL)){q=p;/*使q指向p刚才结点*/p=p->next;}/*使p后移一个结点*/if(info->sum>=p->sum){if(h==p){h=info;info->next=p;}/*info作为头指针,p作为info后继指针*/elseq->next=info;/*q后继指针是info*/info->next=p;}/*info后继指针是p*/else{p->next=info;info->next=NULL;}}/*p后继指针是info,info后继指针是空*/k=h;while(k!=NULL)/*重新给予排序号(排序号因为被插入新数据而改变)*/{n++;k->order=n;k=k->next;}printf("\n----haveinserted%sstudent----\n",info->name);return(h);/*返回头指针*/}/*删除统计模块*/STUDENT*delete(STUDENT*h){chark[5];/*定义字符串数组,用来确定删除信息*/STUDENT*p,*q;/*p为查找到要删除结点指针,q为其前驱指针*/chars[11];/*存放学号*/clrscr();/*清屏*/printf("PleaseenterdeletedNo.\n");/*显示提醒信息*/scanf("%s",s);/*输入要删除统计学号*/q=p=h;/*给q和p赋初值头指针*/while(strcmp(p->no,s)&&p!=NULL)/*当统计学号不是要找,或指针不为空时*/{q=p;/*将p指针值赋给q作为p前驱指针*/p=p->next;/*将p指针指向下一条统计*/}if(p==NULL)/*假如p为空,说明链表中没有该结点*/printf("\nlistno%sstudent\n",s);else/*p不为空,显示找到统计信息*/{printf("----------------------------------havefound---------------------------------\n");printf("|rec|NO.|name|english|math|computer|ave|order|\n");printf("|---|----------|---------------|--------|------|-----------|------|------|\n");printf("||%-10s|%-15s|%8d|%6d|%11d|%5.2f|%5d|\n",p->no,p->name,p->score[0],p->score[1],p->score[2],p->average,p->order);printf("---------------------------------end--------------------------------------\n");do{inputs("Doyoureallywanttodeleted?(y/n)",k,5);}while(k[0]!='y'&&k[0]!='n');if(k[0]!='n')/*删除确定判定*/{if(p==h)/*假如p==h,说明被删结点是头结点*/h=p->next;/*修改头指针指向下一条统计*/elseq->next=p->next;/*不是头指针,将p后继结点作为q后继结点*/free(p);/*释放p所指结点空间*/printf("\nhavedeletedNo%sstudent\n",s);}}return(h);/*返回头指针*/}/*保留数据到文件模块*/voidsave(STUDENT*h){FILE*fp;/*定义指向文件指针*/STUDENT*p;/*定义移动指针*/charoutfile[20];/*保留输出文件名*/printf("Enteroutfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL)/*为输出打开一个二进制文件,如没有则建立*/{printf("Cannotopenfile\n");exit(1);}printf("\nSavingfile......\n");/*打开文件,提醒正在保留*/p=h;/*移动指针从头指针开始*/while(p!=NULL)/*如p不为空*/{fwrite(p,sizeof(STUDENT),1,fp);/*写入一条统计*/p=p->next;/*指针后移*/}fclose(fp);/*关闭文件*/printf("-----Savesuccess!!-----\n");/*显示保留成功*/}/*导入信息模块*/STUDENT*load(){STUDENT*p,*q,*h=NULL;/*定义统计指针变量*/FILE*fp;/*定义指向文件指针*/charinfile[20];/*保留文件名*/printf("Enterinfilename,forexampleG:\\f1\\score.txt:\n");scanf("%s",infile);/*输入文件名*/if((fp=fopen(infile,"rb"))==NULL)/*打开一个二进制文件,为读方法*/{printf("Cannotopenfile\n");/*如不能打开,返回头指针*/returnh;}printf("\n-----Loadingfile!-----\n");p=(STUDENT*)malloc(sizeof(STUDENT));/*申请空间*/if(!p){printf("Outofmemory!\n");/*如没有申请到,则内存溢出*/returnh;/*返回空头指针*/}h=p;/*申请到空间,将其作为头指针*/while(!feof(fp))/*循环读数据直到文件尾结束*/{if(1!=fread(p,sizeof(STUDENT),1,fp))break;/*假如没读到数据,跳

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论