You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
datouer/班级档案管理系统.c

576 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<string.h>
#include<process.h>
#include<stdlib.h>
#include<windows.h>
struct student
{
char id[12];
char name[20];
char sex[3];
int age;
char note[100];
struct student *next;
};
void setposition(int x,int y)
{
HANDLE win = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos = {x,y};
SetConsoleCursorPosition(win,pos);
}
void menu()
{
system("cls");
printf("\n\n\n\n\n");
printf("\t\t|-------------班级档案管理系统----------------|\n");
printf("\t\t|\t a.学生基本信息录入 |\n");
printf("\t\t|\t b.学生基本信息显示 |\n");
printf("\t\t|\t c.学生基本信息保存 |\n");
printf("\t\t|\t d.学生基本信息删除 |\n");
printf("\t\t|\t e.学生基本信息修改 |\n");
printf("\t\t|\t f.学生基本信息查询 |\n");
printf("\t\t|\t g.退出系统 |\n");
printf("\t\t|---------------------------------------------|\n");
}
void Rank()
{
FILE *fp;
void R_Save(struct student *phead);
fp=fopen("D:\\学生信息.txt","r");
struct student *phead1=NULL;
struct student *pEnd1,*pNew1,*pNow1;
pNew1=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew1->id);
fscanf(fp,"%s",pNew1->name);
fscanf(fp,"%s",pNew1->sex);
fscanf(fp,"%d",&pNew1->age);
fscanf(fp,"%s",pNew1->note);
pNew1->next=NULL;
pEnd1=pNew1;
phead1=pNew1;
while(!feof(fp))
{
pNew1=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew1->id);
fscanf(fp,"%s",pNew1->name);
fscanf(fp,"%s",pNew1->sex);
fscanf(fp,"%d",&pNew1->age);
fscanf(fp,"%s",pNew1->note);
pNew1->next=NULL;
pEnd1->next=pNew1;
pEnd1=pNew1;
}
pNow1 = phead1;
while(pNow1->next->next!=NULL)
{
pNow1 = pNow1->next;
}
pNow1->next=NULL;
fclose(fp);
struct student *i,*j,pTemp2;
if(phead1 == NULL)
return;
for(i = phead1; i->next!=NULL;i = i->next)
{
for(j = phead1; j->next!=NULL; j = j->next)
{
if(strcmp(j->id , j->next->id)>0)
{
strcpy(pTemp2.id,j->id); strcpy(j->id,j->next->id); strcpy(j->next->id,pTemp2.id);
strcpy(pTemp2.name,j->name); strcpy(j->name,j->next->name); strcpy(j->next->name,pTemp2.name);
strcpy(pTemp2.sex,j->sex); strcpy(j->sex,j->next->sex); strcpy(j->next->sex,pTemp2.sex);
strcpy(pTemp2.note,j->note); strcpy(j->note,j->next->note); strcpy(j->next->note,pTemp2.note);
pTemp2.age=j->age; j->age=j->next->age; j->next->age=pTemp2.age;
}
}
}
R_Save(phead1);
}
struct student* Create()
{
struct student* phead=NULL;
struct student *pEnd,*pNew;
pNew=(struct student*)malloc(sizeof(struct student));
printf("\t\t\t######请输入学生基本信息######\n");
printf("\t\t\t学号:"); scanf("%s",pNew->id);
printf("\t\t\t姓名;"); scanf("%s",pNew->name);
printf("\t\t\t性别;"); scanf("%s",pNew->sex);
printf("\t\t\t年龄;"); scanf("%d",&pNew->age);
printf("\t\t\t备注:");scanf("%s",pNew->note);
pNew->next=NULL;
pEnd=pNew;
phead=pNew;
char key;
printf("\t\t\t是否继续录入y/任意):\n");
key = getch();
while(key=='y')
{
pNew=(struct student*)malloc(sizeof(struct student));
printf("\t\t\t#####请输入学生基本信息######\n");
printf("\t\t\t学号:"); scanf("%s",pNew->id);
printf("\t\t\t姓名;"); scanf("%s",pNew->name);
printf("\t\t\t性别;"); scanf("%s",pNew->sex);
printf("\t\t\t年龄;"); scanf("%d",&pNew->age);
printf("\t\t\t备注:");scanf("%s",pNew->note);
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
printf("\t\t\t是否继续录入y/任意):\n");
key = getch();
}
struct student *pTemp;
pTemp=phead;
FILE *fp;
if((fp=fopen("D:\\学生信息.txt","a"))!=NULL)
{
while(pTemp!=NULL)
{
fprintf(fp,"%s ",pTemp->id);
fprintf(fp,"%s ",pTemp->name);
fprintf(fp,"%s ",pTemp->sex);
fprintf(fp,"%d ",pTemp->age);
fprintf(fp,"%s ",pTemp->note);
pTemp=pTemp->next;
}
}
system("pause");
fclose(fp);
}
void Print()
{
printf("\t\t\t******学生基本信息*******\n");
FILE *fp;
fp=fopen("D:\\学生信息.txt","r+");
char a[4][100];
int b;
fscanf(fp,"%s%s%s%d%s",a[0],a[1],a[2],&b,a[3]);
while(!feof(fp))
{
printf("学号:%s\n",a[0]);
printf("姓名;%s\n",a[1]);
printf("性别;%s\n",a[2]);
printf("年龄;%d\n",b);
printf("备注:%s\n\n",a[3]);
fscanf(fp,"%s%s%s%d%s",a[0],a[1],a[2],&b,a[3]);
}
fclose(fp);
system("pause");
}
void Save(struct student *phead)
{
struct student *pTemp;
pTemp=phead;
FILE *fp;
if(pTemp!=NULL)
{
if((fp=fopen("D:\\学生信息.txt","w"))!=NULL)
{
while(pTemp!=NULL)
{
fprintf(fp,"%s ",pTemp->id);
fprintf(fp,"%s ",pTemp->name);
fprintf(fp,"%s ",pTemp->sex);
fprintf(fp,"%d ",pTemp->age);
fprintf(fp,"%s ",pTemp->note);
pTemp=pTemp->next;
}
fclose(fp);
}
else
printf("文件打开失败\n");
}
Rank();
system("pause");
}
void R_Save(struct student *phead)
{
struct student *pTemp1;
pTemp1=phead;
FILE *fp;
if(pTemp1!=NULL)
{
if((fp=fopen("D:\\学生信息.txt","w"))!=NULL)
{
while(pTemp1!=NULL)
{
fprintf(fp,"%s ",pTemp1->id);
fprintf(fp,"%s ",pTemp1->name);
fprintf(fp,"%s ",pTemp1->sex);
fprintf(fp,"%d ",pTemp1->age);
fprintf(fp,"%s ",pTemp1->note);
pTemp1=pTemp1->next;
}
fclose(fp);
}
else
printf("文件打开失败\n");
}
}
struct student* Delete()
{
char s[20];
struct student *pTemp,*pre;
FILE *fp;
fp=fopen("D:\\学生信息.txt","r");
struct student *phead=NULL;
struct student *pEnd,*pNew,*pNow;
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd=pNew;
phead=pNew;
while(!feof(fp))
{
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
}
pNow = phead;
while(pNow->next->next!=NULL)
{
pNow = pNow->next;
}
pNow->next=NULL;
printf("\t\t\t请输入学号:");
renew: pre=pTemp=phead; int i=1;
scanf("%s",s);
while(strcmp(pTemp->id,s))
{
i++;
pTemp=pTemp->next;
if(pTemp==NULL)
{
printf("\t\t\t学号输入有误!!!\n");
printf("\t\t\t请重新输入:");
goto renew;
}
}
if(i>1)
{
pre=pTemp=phead;
int j;
for(j=1;j<i;j++)
{
pre=pTemp;
pTemp=pTemp->next;
}
pre->next=pTemp->next;
free(pTemp);
}
else
{
pTemp=phead;
phead=phead->next;
free(pTemp);
}
fclose(fp);
system("pause");
return phead;
}
void search()
{
struct student *pTemp;
FILE *fp;
fp=fopen("D:\\学生信息.txt","r");
struct student *phead=NULL;
struct student *pEnd,*pNew,*pNow;
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd=pNew;
phead=pNew;
while(!feof(fp))
{
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
}
pNow = phead;
while(pNow->next->next!=NULL)
{
pNow = pNow->next;
}
pNow->next=NULL;
fclose(fp);
char x; char s[20];
printf("\t\t\t请选择查询方式\n1.学号查询\n2.姓名查询\n3.性别查询\n4.年龄查询\n");
RE: x=getch();
fflush(stdin); //清空缓冲区
RE1: pTemp=phead; int Y=0; int flag = 1;
switch(x)
{
case'1':
printf("\t\t\t请输入学号:");
break;
case'2':
printf("\t\t\t请输入姓名:");
break;
case'3':
printf("\t\t\t请输入性别:");
break;
case'4':
printf("\t\t\t请输入年龄:");
scanf("%d",&Y);
goto jump;
break;
default:
printf("\t\t\t输入有误!\n\t\t\t请重新选择:\n");
goto RE;
}
scanf("%s",s);
jump: while(pTemp!=NULL)
{
switch(x)
{
case'1':
if(strcmp(s,pTemp->id)==0)
{
printf("学号:%s\n",pTemp->id);
printf("姓名;%s\n",pTemp->name);
printf("性别;%s\n",pTemp->sex);
printf("年龄;%d\n",pTemp->age);
printf("备注:%s\n\n",pTemp->note);
flag = 0;
}
break;
case'2':
if(strcmp(s,pTemp->name)==0)
{
printf("学号:%s\n",pTemp->id);
printf("姓名;%s\n",pTemp->name);
printf("性别;%s\n",pTemp->sex);
printf("年龄;%d\n",pTemp->age);
printf("备注:%s\n\n",pTemp->note);
flag = 0;
}
break;
case'3':
if(strcmp(s,pTemp->sex)==0)
{
printf("学号:%s\n",pTemp->id);
printf("姓名;%s\n",pTemp->name);
printf("性别;%s\n",pTemp->sex);
printf("年龄;%d\n",pTemp->age);
printf("备注:%s\n\n",pTemp->note);
flag = 0;
}
break;
case'4':
if(Y==pTemp->age)
{
printf("学号:%s\n",pTemp->id);
printf("姓名;%s\n",pTemp->name);
printf("性别;%s\n",pTemp->sex);
printf("年龄;%d\n",pTemp->age);
printf("备注:%s\n\n",pTemp->note);
flag = 0;
}
break;
}
pTemp=pTemp->next;
}
if(flag)
{
printf("\t\t\t未查询到相关信息,请重试!\n");
goto RE1;
}
system("pause");
}
struct student* Change()
{
struct student *pTemp;
FILE *fp;
fp=fopen("D:\\学生信息.txt","r");
struct student *phead=NULL;
struct student *pEnd,*pNew,*pNow;
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd=pNew;
phead=pNew;
while(!feof(fp))
{
pNew=(struct student*)malloc(sizeof(struct student));
fscanf(fp,"%s",pNew->id);
fscanf(fp,"%s",pNew->name);
fscanf(fp,"%s",pNew->sex);
fscanf(fp,"%d",&pNew->age);
fscanf(fp,"%s",pNew->note);
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
}
pNow = phead;
while(pNow->next->next!=NULL)
{
pNow = pNow->next;
}
pNow->next=NULL;
char s[20];
char m[10]; int flag=1;
RE1: printf("\t\t\t请输入密码: ");
scanf("%s",m);
if(strcmp(m,"123456")==0)
{
RE: pTemp=phead;
printf("\t\t\t请输入要修改学生的学号:");
scanf("%s",s);
while(pTemp!=NULL)
{
if(strcmp(s,pTemp->id)==0)
{
printf("\t\t\t学号:%s\t\t\t修改学号:",pTemp->id); scanf("%s",pTemp->id);
printf("\t\t\t姓名;%s\t\t\t\t\t修改姓名:",pTemp->name); scanf("%s",pTemp->name);
printf("\t\t\t性别;%s\t\t\t\t\t修改性别:",pTemp->sex); scanf("%s",pTemp->sex);
printf("\t\t\t年龄;%d\t\t\t\t\t修改年龄:",pTemp->age); scanf("%d",&pTemp->age);
printf("\t\t\t备注:%s\t\t\t修改备注:",pTemp->note); scanf("%s",pTemp->note);
flag = 0;
break;
}
pTemp=pTemp->next;
}
}
else
{
printf("\t\t\t密码输入错误,请重新输入!\n");
goto RE1;
}
if(flag)
{
printf("\t\t\t学号输入错误,请重新输入!\n");
goto RE;
}
system("pause");
fclose(fp);
return phead;
}
int main()
{
system("color E5");
char x=0;
char m[7];
struct student *head=NULL;
Re:
setposition(40,14);
printf("请输入密码: ");
setposition(39,13);
printf("*********************");
setposition(39,15);
printf("*********************");
setposition(39,14);
printf("*");
setposition(59,14);
printf("*");
setposition(51,14);
scanf("%s",m);
if(strcmp(m,"aaaaaa")==0)
{
while(1)
{
if(x=='g')
exit(0);
switch(x)
{
case'a':
Create();
break;
case'b':
Print();
break;
case'c':
Save(head);
break;
case'd':
head=Delete();
break;
case'e':
head=Change();
break;
case'f':
search();
break;
}
menu();
printf("\t\t\t请选择你要执行的操作:");
scanf("%c",&x);
}
}
else
{
setposition(40,14);
printf("\t\t\t密码错误!\n");
Sleep(1000);
goto Re;
}
return 0;
}