#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->
一Ⅱ彡
- 粉丝: 15
- 资源: 4
最新资源
- Delphi 12 控件之FlashAV FFMPEG VCL Player For Delphi v7.0 for D10-D11 Full Source.7z
- 新年贺岁代码!喜迎新年
- Python编程理论知识、基本语法与应用方式
- 模块化多电平变器(MMC),本模型为三相MMC整流器 控制策略:双闭环控制、桥臂电压均衡控制、模块电压均衡控制、环流抑制控制策略、载波移相调制,可供参考学习使用,默认发2020b版本及以上
- kdeconnect-android1.32.9
- IMG20241223015444.jpg
- 质子交膜燃料电池PEMFC Matlab simulink滑模控制模型,过氧比控制,温度控制,阴,阳极气压控制
- file_241223_024438_84523.pdf
- 新年主题:文化内涵、传统习俗与现代庆祝方式解析
- 光储并网VSG系统Matlab simulink仿真模型,附参考文献 系统前级直流部分包括光伏阵列、变器、储能系统和双向dcdc变器,后级交流子系统包括逆变器LC滤波器,交流负载 光储并网VSG系
- 安卓手机端安装xapk、apkm软件 并且支持解压 压缩功能
- python编写微信读取smart200plc的数据发送给微信联系人
- 光储并网simulink仿真模型,直流微电网 光伏系统采用扰动观察法是实现mppt控制,储能可由单独蓄电池构成,也可由蓄电池和超级电容构成的混合储能系统,并采用lpf进行功率分配 并网采用pq控制
- 172.16.100.195
- FeiQ.rar 局域网内通信服务软件
- NC Cloud 2020 05应用方案手册-报表平台
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈