📄 kaohe.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
#define NULL 0
struct Student
{
char name[30];
int math;
int English;
int c;
int xiandai;
int physics;
struct Student *next;
};
struct Student *creattab(int n);
struct Student *insert(struct Student *phead);
struct Student *print(struct Student *phead);
struct Student *del(struct Student *phead);
struct Student *find(struct Student *phead);
struct Student *modify(struct Student *phead);
struct Student *range(struct Student *phead);
struct Student *enter(struct Student *phead);
struct Student *unget(struct Student *phead);
void enterdata(struct Student *pnew);
void range1(struct Student *phead);
void range2(struct Student *phead);
void range3(struct Student *phead);
void range4(struct Student *phead);
void range5(struct Student *phead);
void save(struct Student *phead);
void read(struct Student *phead);
//-------------------主函数----------------------
int main()
{
int a;
int m=1;
int n=34;
struct Student *phead=NULL;
system("color 2E");
while(m)
{
printf(" 学生成绩管理程序 \n");
printf(" \n");
printf(" 1.创建学生信息 \n");
printf(" 2.插入学生信息 \n");
printf(" 3.修改学生信息 \n");
printf(" 4.删除学生信息 \n");
printf(" 5.单科学习成绩录入 \n");
printf(" 6.单科成绩排名 \n");
printf(" 7.输出学生信息 \n");
printf(" 8.不及格超过2科的学生 \n");
printf(" 9.查找某个人的各科成绩 \n");
printf(" 10.保存学生信息 \n");
printf(" 11.输出学生信息 \n");
printf(" 12.退出 \n");
scanf("%d",&a);
getchar();
switch(a)
{
case 1:
phead=creattab(n);
break;
case 2:
phead=insert(phead);
break;
case 3:
phead=modify(phead);
break;
case 4:
phead=del(phead);
break;
case 5:
phead=enter(phead);
break;
case 6:
phead=range(phead);
break;
case 7:
phead=print(phead);
break;
case 8:
phead=unget(phead);
break;
case 9:
phead=find(phead);
break;
case 10:
save(phead);
break;
case 11:
read(phead);
break;
case 12:
m=0;
break;
default:
printf("\n输入错误,请重新输入\n、");
break;
}
}
return 0;
}
//-------------------
void enterdata(struct Student *pnew)
{
printf("请输入姓名 :");
scanf("%s", pnew->name);
printf("请输入高数成绩 :");
scanf("%d", &pnew->math);
while (pnew->math<0 || pnew->math>100)
{
printf("您的输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->math);
}
printf("请输入英语成绩 :");
scanf("%d", &pnew->English);
while (pnew->English<0 || pnew->English>100)
{
printf("您的输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->English);
}
printf("请输入线代成绩 :");
scanf("%d", &pnew->xiandai);
while (pnew->xiandai<0 || pnew->xiandai>100)
{
printf("您的输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->xiandai);
}
printf("请输入C语言成绩:");
scanf("%d", &pnew->c);
while (pnew->c<0 || pnew->c>100)
{
printf("您的输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->c);
}
printf("请输入物理成绩:");
scanf("%d", &pnew->physics);
while (pnew->physics<0 || pnew->physics>100)
{
printf("您的输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->physics);
}
printf("\n\n");
printf("姓名 高数 英语 C语言 线代 物理 \n");
printf(" \n");
printf("%-15s%4d%10d%12d%12d%12d\n", pnew->name, pnew->math, pnew->English, pnew->c, pnew->xiandai,pnew->physics);
printf("\n\n");
}
//-----------------创建学生信息--------------
struct Student *creattab(int n)
{
int i;
char ch;
struct Student *phead;
struct Student *pnew;
struct Student *ptail;
pnew=(struct Student *)malloc(sizeof(struct Student));
phead=pnew;
ptail=pnew;
enterdata(pnew);
pnew->next=NULL;
printf("是否继续,输入Y继续,输入其它键停止:");
getchar();
ch=getchar();
if (ch=='y')
{
for (i=2; i<=n; i++)
{
pnew=(struct Student *)malloc(sizeof(struct Student));
enterdata(pnew);
pnew->next=NULL;
ptail->next=pnew;
ptail=pnew;
printf("\n是否继续,输入Y继续,输入其它键停止:");
getchar();
ch=getchar();
if(ch!='y')
{
break;
}
}
}
system("cls");
return (phead);
}
//--------------删除学生信息---------------------------
struct Student *del(struct Student *phead)
{
int m;
char stu[30];
struct Student *p1;
struct Student *p2;
if(phead == NULL)
{
printf("此表为空\n");
return (phead);
}
printf("请输入您要删除人的姓名:\n");
scanf("%s", stu);
p1=phead;
while( (m=strcmp(stu,p1->name) )!=0 && p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if((m=strcmp(stu,p1->name)) == 0)
{
if(p1 == phead)
{
phead=p1->next;
}
else
{
p2->next=p1->next;
}
free(p1);
printf("delete: %s\n", stu);
}
else
{
printf("没有找到 %s \n", stu);
}
return (phead);
}
//-----------插入学生信息-------------------------
struct Student *insert(struct Student *phead)
{
struct Student *pnew;
struct Student *p;
p=phead;
if(phead == NULL)
{
printf("此表为空...下面开始新建信息:\n\n");
pnew=(struct Student *)malloc(sizeof(struct Student));
phead=pnew;
enterdata(pnew);
pnew->next=NULL;
return (phead);
}
while(p->next != NULL)
{
p=p->next;
}
pnew=(struct Student *)malloc(sizeof(struct Student));
enterdata(pnew);
pnew->next=NULL;
p->next =pnew;
return (phead);
}
//---------------- 遍历 ----- 输出数据 ------------
struct Student *print(struct Student *phead)
{
int i;
int j;
int n1=0;
struct Student *pnew[34];
struct Student *p;
struct Student *temp;
p=phead;
for(i=0; i<34; i++)
{
if(p != NULL)
{
pnew[i]=p;
p=p->next;
n1++;
}
}
for(i=0; i<n1-1; i++)
{
for(j=i+1; j<n1; j++)
{
if(strcmp(pnew[i]->name, pnew[j]->name )<0)
{
temp=pnew[j];
pnew[j]=pnew[i];
pnew[i]=temp;
}
}
}
p=phead;
if(phead!=NULL)
{
printf("姓名 高数 英语 C语言 线代 物理 \n");
printf(" \n");
do
{
printf("%-15s%4d%10d%12d%12d%12d\n", p->name, p->math, p->English, p->c, p->xiandai,p->physics);
p=p->next;
}while(p != NULL);
}
else
{
printf("此表为空...\n");
return (phead);
}
return (phead);
}
//------------------单科学习成绩录入------------------------------
struct Student *enter(struct Student *phead)
{
int t;
struct Student *pnew;
struct Student *p ;
p=phead;
if(phead == NULL)
{
printf("此表为空...下面开始新建信息:\n\n");
pnew=(struct Student *)malloc(sizeof(struct Student));
phead=pnew;
enterdata(pnew);
pnew->next=NULL;
return (phead);
}
while(p->next != NULL)
{
p=p->next;
}
pnew=(struct Student *)malloc(sizeof(struct Student));
pnew->English = NULL;
pnew->math = NULL;
pnew->c = NULL;
pnew->xiandai = NULL;
pnew->physics = NULL;
printf("请输入姓名: \n");
scanf("%s", pnew->name);
do
{
printf(" \n");
printf(" 1.输入高数成绩 \n");
printf(" 2.输入英语成绩 \n");
printf(" 3.输入C语言成绩 \n");
printf(" 4.输入线代成绩 \n");
printf(" 5.输入物理成绩 \n");
printf(" 6.退出 \n");
printf(" \n");
printf(" 请选择: \n");
scanf("%d",&t);
getchar();
switch(t)
{
case 1:
printf("请输入高数成绩:\n");
scanf("%d", &pnew->math);
while (pnew->math<0 || pnew->math>100)
{
printf("输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->math);
}
break;
case 2:
printf("请输入英语成绩:\n");
scanf("%d", &pnew->English);
while (pnew->English<0 || pnew->English>100)
{
printf("输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->English);
}
break;
case 3:
printf("请输入c成绩:\n");
scanf("%d", &pnew->c);
while (pnew->c<0 || pnew->c>100)
{
printf("输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->c);
}
break;
case 4:
printf("请输入线代成绩:\n");
scanf("%d", &pnew->xiandai);
while (pnew->xiandai<0 || pnew->xiandai>100)
{
printf("输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->xiandai);
}
break;
case 5:
printf("请输入物理成绩:\n");
scanf("%d", &pnew->physics);
while (pnew->xiandai<0 || pnew->xiandai>100)
{
printf("输入错误,请重新输入:");
getchar();
scanf("%d", &pnew->xiandai);
}
break;
case 6:
t=6;
break;
default:
printf("输入错误,请重新输入: \n");
break;
}
pnew->next=NULL;
p->next=pnew;
}while(t!=6);
system("cls");
return (phead);
}
//----------------------单科成绩排名--------------------------------
struct Student *range(struct Student *phead)
{
int n1;
int m=1;
if(phead == NULL)
{
printf("此表为空...\n\n");
return (phead);
}
while(m)
{
printf("1.按高数成绩排名 \n");
printf("2.按英语成绩排名 \n");
printf("3.按C语言成绩排名 \n");
printf("4.按线代成绩排名 \n");
printf("5.按物理成绩排名 \n");
printf("6.退出 \n");
printf(" \n");
printf(" 请选择: \n");
scanf("%d",&n1);
getchar();
switch(n1)
{
case 1:
range1(phead);
break;
case 2:
range2(phead);
break;
case 3:
range3(phead);
break;
case 4:
range4(phead);
break;
case 5:
range5(phead);
break;
case 6:
m=0;
break;
default:
printf("输入错误,请重新输入\n\n");
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -