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.

460 lines
8.8 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");
}
int iCount;
struct student* Create()
{
struct student* phead=NULL;
struct student *pEnd,*pNew;
iCount=0;
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/任意):");
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;
}
} 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",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((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);
return;
}
else
printf("文件打开失败");
}
struct student* Delete()
{
char s[20]; int i=1;
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;
pre=pTemp=phead;
printf("请输入学号:");
renew: scanf("%s",s);
while(strcmp(pTemp->id,s))
{
i++;
pTemp=pTemp->next;
if(pTemp==NULL)
{
printf("学号输入有误!!!");
printf("请重新输入:");
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);
int x; char s[20];
printf("\t\t\t请选择查询方式\n1.学号查询\n2.姓名查询\n3.性别查询\n4.年龄查询\n");
RE: scanf("%d",&x);
pTemp=phead; int Y=0;
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请重新选择:");
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",pTemp->note);
} 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",pTemp->note);
} 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",pTemp->note);
}
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",pTemp->note);
} break;
}
pTemp=pTemp->next;
}
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;
pTemp=phead;
char s[20];
printf("请输入要修改学生的学号:");
scanf("%s",s);
while(pTemp!=NULL)
{
if(strcmp(s,pTemp->id)==0)
{
printf("\t\t\t学号:"); scanf("%s",pTemp->id);
printf("\t\t\t姓名;"); scanf("%s",pTemp->name);
printf("\t\t\t性别;"); scanf("%s",pTemp->sex);
printf("\t\t\t年龄;"); scanf("%d",&pTemp->age);
printf("\t\t\t备注:"); scanf("%s",pTemp->note);
break;
}
pTemp=pTemp->next;
}
system("pause");
fclose(fp);
return phead;
}
int main()
{
system("color F5");
char x=0;
char m[7];
struct student *head;
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
{
printf("密码错误,请重试!!!\n");
goto Re;
}
return 0;
}