#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#define mall(student) (struct student *)malloc(sizeof(struct student))
struct student
{
char xuehao[111];
char name[111];
int fen;
struct student *hou;
}*fuz,*tou;
void gotoxy(int x,int y)
{
COORD loc;
loc.X = y;
loc.Y = x;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
}//坐标定位函数
void caidan()
{
gotoxy(2,32);
puts("学生管理系统");
puts("");
puts(" 1.插入");
puts(" 2.删除");
puts(" 3.显示");
puts(" 4.修改");
puts(" 5.结束");
}
void rulie(char *mi,char *hao,int fen)
{
struct student *p;
p=mall(student);
strcpy(p->name,mi);
strcpy(p->xuehao,hao);
p->fen=fen;
p->hou=NULL;
fuz->hou=p;
fuz=p;
}
void charu()
{
char mi[111];
char hao[111];
int fen;
int n,m=1;
system("cls");
puts("请输入插入的学生个数");
scanf("%d",&n);
while(n--)
{
printf("第%d个学生\n",m++);
puts("输入姓名");
scanf("%s",mi);
puts("输入学号");
scanf("%s",hao);
puts("输入成绩");
scanf("%d",&fen);
rulie(mi,hao,fen);
}
system("cls");
caidan();
}
void xianshi()
{
struct student *jb;
int nb=0;
jb=tou;
while(jb->hou!=NULL)
{
nb=1;
printf("姓名 %s\n学号 %s\n成绩 %d\n",jb->hou->name,jb->hou->xuehao,jb->hou->fen);
puts("");
jb=jb->hou;
}
if(nb==0)
{
puts("查询无果");
return;
}
puts("按任意键返回");
while(1)
{
while(_kbhit())
{
getch();
system("cls");
caidan();
return;
}
}
}
int chulie(char *hao)
{
struct student *jb;
int w=0;
struct student *lz;
jb=tou;
while(jb->hou!=NULL)
{
lz=jb;
jb=jb->hou;
if(strcmp(jb->xuehao,hao)==0)
{
w=1;
break;
}
}
if(w==0)
{
puts("查询无果,请保证数据的准确");
return 1;
}
lz->hou=jb->hou;
//delete jb;
free(jb);
puts("删除成功");
return 0;
}
void del()
{
int n,i=1;
char abc[111];
puts("请输入删除学生的个数");
scanf("%d",&n);
while(n--)
{
printf("第%d个\n",i++);
loop:
puts("请输入学号");
scanf("%s",abc);
if(chulie(abc)==1)
{
goto loop;
}
Sleep(1000);
}
system("cls");
caidan();
}
int xiugai(char *hao)
{
int w=0;
struct student *jb;
jb=tou;
while(jb->hou!=NULL)
{
jb=jb->hou;
if(strcmp(jb->xuehao,hao)==0)
{
w=1;
break;
}
}
if(w==0)
{
puts("查询无果,请保证数据的准确");
return 1;
}
else
{
char ao[123];
int k;
puts("找到目标,请输入需要修改的选项:1,姓名 2,学号 3,成绩,0 返回");
scanf("%d",&k);
if(k==1)
{
puts("请输入姓名");
scanf("%s",ao);
strcpy(jb->name,ao);
}
else if(k==2)
{
puts("请输入学号");
scanf("%s",ao);
strcpy(jb->xuehao,ao);
}
else if(k==3)
{
puts("请输入成绩");
scanf("%d",&k);
jb->fen=k;
}
else if(k==0)
{
return 2;
}
puts("修改成功");
Sleep(1000);
}
return 0;
}
void gai()
{
int n,i=1,yy;
char abc[111];
puts("请输入修改学生的个数");
scanf("%d",&n);
while(n--)
{
printf("第%d个\n",i++);
loop:
puts("请输入学号");
scanf("%s",abc);
yy=xiugai(abc);
if(yy==1)
{
goto loop;
}
else if(yy==2)
{
system("cls");
caidan();
return;
}
}
system("cls");
caidan();
}
void paixu()
{
struct student *jb,*lz,*st;
int n=0;
for(jb=tou->hou; jb->hou!=NULL; jb=jb->hou)
n++;
while(n--)
{
for(lz=tou->hou,st=tou; lz->hou!=NULL; lz=lz->hou)
{
if((lz->fen)<(lz->hou->fen))
{
struct student *mao;
mao=lz;
st->hou=mao->hou;
mao->hou=st->hou->hou;
st->hou->hou=mao;
lz=st->hou;
}
st=st->hou;
}
}
}
int main()
{
FILE *gs;
char mi[111],hao[111];
int w;
int fen;
struct student *jb;
if((gs=fopen("123.txt","r"))==NULL)
gs=fopen("123.txt","w+");
system("color 1f");
fuz=mall(student);
tou=fuz;
tou->hou=NULL;
caidan();
while(fscanf(gs,"%s%s%d",mi,hao,&fen)!=EOF)
rulie(mi,hao,fen);
fclose(gs);
while(1)
{
scanf("%d",&w);
if(w==1)
{
charu();
}
else if(w==3)
{
paixu();
xianshi();
}
else if(w==5)
{
FILE *gs;
if((gs=fopen("123.txt","w+"))==NULL)
{
puts("打开错误");
getch();
exit(1);
}
jb=tou;
while(jb->hou!=NULL)
{
fprintf(gs,"%s\n%s\n%d\n",jb->hou->name,jb->hou->xuehao,jb->hou->fen);
jb=jb->hou;
}
fclose(gs);
return 0;
}
else if(w==2)
{
del();
}
else if(w==4)
{
gai();
}
else
{
puts("输入错误");
Sleep(1000);
system("cls");
caidan();
}
}
return 0;
}//VC可运行
学生管理系统
最新推荐文章于 2021-08-27 17:18:30 发布