#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "conio.h"
#include "ctype.h"
#include "dos.h"
#include "windows.h"
#define HEADER1 " |_________________________________学生成绩表________________________________|\n"
#define HEADER2 " | 学号 | 姓名 | 计算机 | 数学 | 英语 | 总分 | 平均分 | 名次 |\n"
#define HEADER3 " |--------|--------|----------|--------|--------|--------|----------|--------|\n"
#define FORMAT " |%-5s %-8s %-5d %-5d %-5d %-6d %-6.2f %-5d |\n"
#define DATA p->data.num,p->data.name,p->data.cgrade,p->data.mgrade,p->data.egrade,p->data.total,p->data.ave,p->data.rank
#define END " _____________________________________________________________________________\n"
int saveflag=0; //是否需要存盘的变量
typedef struct student
{
char num[10];
char name[15];
int cgrade;
int mgrade;
int egrade;
int total;
float ave;
int rank;
};
typedef struct node
{
struct student data;
struct node *next;
}Node, *Link; //Node为node类型的结构变量,*Link为node类型的指针变量
void menu()
{
system("cls");
//textcolor(10);
//gotoxy(10,5);
printf(" 学生成绩分析系统 \n");
//gotoxy(10,8);
printf("\t\t********************主界面***********************\n");
//gotoxy(10,9);
printf("\t\t* 1 输入 2 删除\t\t*\n");
//gotoxy(10,10);
printf("\t\t* 3 查找 4 修改\t\t*\n");
//gotoxy(10,11);
printf("\t\t* 5 插入 6 统计\t\t*\n");
//gotoxy(10,12);
printf("\t\t* 7 排序 8 保存\t\t*\n");
//gotoxy(10,13);
printf("\t\t* 9 输出 0 退出\t\t*\n");
//gotoxy(10,14);
printf("\t\t*************************************************\n");
}
void printheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
printf(END);
}
void printdata(Node *pp)
{
Node *p;
p=pp;
printf(FORMAT,DATA);
}
void Wrong()
{
printf("\n\n\n\n\n***************错误:输入错误!按任意键继续*********************\n");
getchar();
}
void Nofind()
{
printf("\n========>没有找到学生记录!\n");
}
void Disp(Link l)
{
Node *p;
p=l->next;
if(!p)
{
printf("\n=========>没有学生记录!\n");
getchar();
return ;
}
printf("\n\n");
printheader();
while(p)
{
printdata(p);
p=p->next;
printf(HEADER3);
}
getchar();
getchar();
}
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)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) //按姓名查询
{
r=l->next;
for(;r!=NULL;)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}
void stringinput(char *t,int lens,char *notice) //输入字符串,并进行长度验证
{
char n[255];
do{
printf(notice);
scanf("%s",n);
if(strlen(n)>lens)
printf("\n 超过预定的长度\n");
}while(strlen(n)>lens);
strcpy(t,n);
}
int numberinput(char *notice)
{
int t=0;
do{
printf(notice);
scanf("%d",&t);
if(t>100||t<0)
printf("成绩必须在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;
system("cls");
Disp(l);
while(r->next!=NULL)
r=r->next;
while(1)
{
while(1)
{
stringinput(num,10,"输入学号:");
flag=0;
if(strcmp(num,"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("======>学号%s不存在,重新输入?(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申请空间失败!");
return ;
}
strcpy(p->data.num,num);
stringinput(p->data.name,15,"姓名:");
p->data.cgrade=numberinput("计算机成绩[0-100]:");
p->data.mgrade=numberinput("数学成绩[0-100]:");
p->data.egrade=numberinput("英语成绩[0-100]:");
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=(float)(p->data.total/3);
p->data.rank=0;
p->next=NULL;
r->next=p;
r=p;
saveflag=1;
}
return ;
}
void search(Link l)
{
int i,k,j=1;
char tr[18];
printf("输入你要找的姓名:");
scanf("%s",&tr);
printheader();
for(k=0; l!=NULL;)
{
if((0==strcmp(l->data.name,tr)))
{
k=1;
printdata(l);
printf(END);
}
l=l->next;
}
if(k==0)
{
Nofind();
getchar();
}
printf("\n");
system("pause");
}
void Qur(Link l) //按姓名或学号查找
{
int select;
char searchinput[20];
Node *p;
if(!l->next)
{
system("cls");
printf("\n=====>没有学生记录!\n");
getchar();
return ;
}
system("cls");
printf("\n ======>1 按学号查询======>2 按姓名查询\n");
printf(" 请选择[1,2]:");
scanf("%d",&select);
if(select==1)
{
stringinput(searchinput,10,"输入学号:");
p=Locate(l,searchinput,"num");
if(p)
{
printheader();
printdata(p);
printf(END);
printf("按任意键返回!");
getchar();
}
else
Nofind();
getchar();
}
else if(select==2)
{
search(l);
}
else
Wrong();
getchar();
}
void Del(Link l)
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
system("cls");
printf("\n=====>没有学生记录!\n");
getchar();
return ;
}
system("cls");
Disp(l);
printf("\n =====>1 按学号删除 =====>2 按姓名删除\n");
printf(" 请选择[1,2]:");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"输入学号:");
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>删除成功!\n");
printf("\n按任意键返回!\n");
getchar();
saveflag=1;
}
else
{
Nofind();
printf("\n按任意键返回!\n");
getchar();
}
}
else
if(sel==2)
{
stringinput(findmess,15,"输入姓名:");
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>删除成功!\n");
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
else
Wrong();
getchar();
}
void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
system("cls");
printf("\n=====>没有学生记录!\n");
getchar();
return ;
}
system("cls");
printf("修改");
Disp(l);
stringinput(findmess,10,"输入学号:");
p=Locate(l,findmess,"num");
if(p)
{
printf("学号:%s,\n",p->data.num);
printf("姓名:%s,\n",p->data.name);
stringinput(p->data.name,15,"输入姓名:");
printf("计算机成绩:%d,",p->data.cgrade);
p->data.cgrade=numberinput("C语言成绩[0-100]:");
printf("数学成绩:%d,",p->data.mgrade);
p->data.mgrade=numberinput("数学成绩[0-100]:");
printf("英语成绩:%d,",p->data.egrade);
p->data.mgrade=numberinput("英语成绩[0-100]:");
p->data.total=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=(float)(p->data.total/3);
p->data.rank=0;
printf("\n=====>修改成功!\n");
Disp(l);
saveflag=1;
}
else
Nofind();
getchar();
}
void Insert(Link l) //插入记录
{
Link p,v,newinfo;
char ch,num[10],s[10];
int flag=0;
v=l->next;
system("cls");
Disp(l);
while(l)
{
stringinput(s,10,"请输入在哪个学号后插入记录:");
flag=0; v=l->next;
while(v)
{
if(strcmp(v->data.num,s)==0)
{ flag=1; break; }
v=v->next;
}
if(flag==1)
break;
else
{
getchar();
printf("\n=====>学号%s不存在,继续?(y/n):",s);
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
{ continue; }
else
{ return ;}
}
}
stringinput(num,10,"输入学号:");
v=l->next;
while(v)
{
if(strcmp(v->
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、问题描述 设计并实现一个成绩分析系统,能够实现录入、保存一个班级学生多门课程的成绩、并对成绩进行分析等功能。 2、需求分析 具体要求如下: (1)定义一个菜单,方便用户实现下述操作。要求菜单简洁、易操作、界面美观。 (2)建立磁盘文件input,用于保存学生及其信息。 (3)读取磁盘文件input.dat中的数据,并进行处理。要求实现如下功能: ·按各门课程成绩排序,将排序的结果保存到磁盘文件中。 ·计算每人的平均成绩,按平均成绩排序,将排序的结果保存到磁盘文件中。 ·能够统计各门课程的平均成绩、最高分、最低分、不及格人数、60-69分人数、70-79分人数、80-89分人数、90分以上人数。 ·根据学生姓名或学号查询其各门课成绩,需考虑重名情况的处理。
资源推荐
资源详情
资源评论
收起资源包目录
成绩分析问题.zip (14个子文件)
成绩分析问题
input.dat 392B
GradesAnalysis.plg 804B
GradesAnalysis.ncb 57KB
GradesAnalysis.dsp 3KB
GradesAnalysis.dsw 536B
Debug
vc60.pdb 76KB
GradesAnalysis.pdb 625KB
vc60.idb 153KB
GradesAnalysis.exe 212KB
GradesAnalysis.obj 64KB
GradesAnalysis.pch 3.42MB
GradesAnalysis.ilk 264KB
GradesAnalysis.cpp 18KB
GradesAnalysis.opt 48KB
共 14 条
- 1
资源评论
- phths2022-06-17为什么打开dat文件会出现乱码
一Ⅱ彡
- 粉丝: 15
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功