学生管理系统

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include <conio.h>
#define LEN sizeof(struct Student)
#define LEN1 sizeof(struct user)
#define ST 2
#define USER 2
#define sScore(p) (p->cScore+p->eScore+p->mScore)

//函数声明
void mainMenu();
void menu1();
//void menu2();
void import();
void insert();
void deletestu();
void modify();
void research();
//void printInformation();
void regist();//注册
//void student();
void teacher();
//void amendpassword();//修改密码
void order();//排序
void show();
void read();
void write();
void changePass();
int login();

struct Student{
int ID; //,学号
char name[10]; //姓名
char sex[3]; //性别
char group[10]; //班级
int cScore; //C语言成绩
int eScore; //英语成绩
int mScore; //数学成绩
struct Student * Next;
} *pHeader;
struct user{
char username[10];
char password[10];
int id;
}use[USER];


void mainMenu()
{
printf(" ***************************************** \n ");
printf(" * 学生成绩管理 * \n ");
printf(" * 正在启动....... * \n ");
printf(" * * \n ");
printf(" *     * \n ");
printf(" *      * \n ");
printf(" * * \n ");
printf(" ***************************************** \n ");
Sleep(1000);
system("cls");
}
int main()
{
mainMenu();
FILE *fp;
//void inputuser();
int i,w;
char command;
char username[10];
char password[10];
pHeader=(struct Student*)malloc(sizeof(struct Student));
pHeader->Next=NULL;
//fp = fopen("d:\\data.txt","a+");
if((fp = fopen("data.dat","r+"))==NULL)
{
fp=fopen("data.dat","w+");
printf("初始化完成,请退出后重新启动程序\n");
}
else
{
while(1)
{
system("cls");
printf("1.查看成绩\n");
printf("2.查找成绩\n");
printf("3.管理员登陆\n");
read();
command=getch();
system("cls");
switch(command)
{
case '1':show();break;
case '2':research();break;
case '3':
while(!login());
system("cls");
teacher();
}
if(command>='1' && command<='3')
{
printf("按任意键继续\n");
getch();

}

}

}

/*
regist();
printf("please input username:\n");
scanf("%s",&username);


printf("please input Password:\n");
scanf("%s",&password);


for(i=0;i<USER;i++)
{
fread(&use[i],LEN1,1,fp);
}

for(i=0; i<USER; i++)
{

if(strcmp(username,use[i].username)==0&&strcmp(password,use[i].password)==0&&use[i].id==1)
{
teacher();
break;
}

else if(strcmp(username,use[i].username)==0&&strcmp(password,use[i].password)==0&&use[i].id==0)
{
student();
break;
}

else
{
for(i=0; i<USER; i++)
{
fwrite(&Use[i],sizeof(struct user),1,fp);
}
printf("username or password Error!!!\n");
}

}
}
fclose(fp);
*/
return 0;
}
void regist()
{
FILE *fp;
char password[20];
fp=fopen("admin.dat","w");
printf("please input the password:");
scanf("%s",password);
fprintf(fp,"%s",password);
printf("注册完成!");
fclose(fp);
}

int login()
{
FILE *fp;
char password[20],inputpass[20];
fp=fopen("admin.dat","r");
fgetc(fp);
if(fp==NULL || feof(fp))
{
regist();
}
rewind(fp);
fscanf(fp,"%s",password);
fclose(fp);
printf("账号登陆\n");
printf("请输入密码:");
scanf("%s",inputpass);
if(strcmp(password,inputpass)==0)
{
return 1;
}
else
{
printf("密码错误\n");
return 0;
}
}

void teacher()
{
char command;
while(1)
{
read();
//system("cls");
menu1();
command=getch();
system("cls");
switch(command)
{
case '0':
exit(0);
break;
case '1':
import();
break;
case '2':
research();
break;
case '3':
deletestu();
break;
case '4':
insert();
break;
case '5':
show();
break;
case '6':
modify();
break;
case '7':
changePass();
break;
}
write();
if(command>='1' && command<='6')
{
printf("按任意键继续\n");
getch();

}
system("cls");
}
}
/*
void student()
{
int w;
while(1)
{
system("cls");
//menu2();
scanf("%d",&w);
switch(w)
{
case 0:
exit(0);
break;
case 1:
research();
break;
case 2:
show();
break;
}
}
}
*/

 

//输入每个学生信息
void import()
{
//struct Student * pHeader;
struct Student * pCurNode;
struct Student * pNewNode;
int total;
int index=0;
pHeader=(struct Student*)malloc(sizeof(struct Student));
pCurNode = pHeader;
printf("请输入班级的总人数:");
scanf("%d",&total);
printf("请输入每个学生的学号,姓名,性别,班级,c语言成绩,英语成绩,数学成绩:\n");
while(index < total)
{
printf("请输入第%d个学生的信息:\n",index+1);
pNewNode = (struct Student*)malloc(sizeof(struct Student));
scanf("%d%s%s%s%d%d%d",&pNewNode->ID,pNewNode->name,pNewNode->sex,pNewNode->group,&pNewNode->cScore,&pNewNode->eScore,&pNewNode->mScore);
pNewNode->Next=NULL;
pCurNode->Next=pNewNode;
pCurNode=pNewNode;
index++;
}
write();
printf("输出所有学生信息(学生信息输入完成)!\n");
}
//删除一个学生的信息
void deletestu(){
struct Student * pCurNode;
pCurNode=(struct Student*)malloc(sizeof(struct Student));
pCurNode=pHeader;
int searchID;
struct Student * pSearch,*pTempNode;
pSearch=(struct Student*)malloc(sizeof(struct Student));

printf("请输入要删除学生的学号:\n");
scanf("%d",&searchID);

pCurNode=pHeader->Next;
pTempNode=pHeader;
while(pCurNode!=NULL){
if(pCurNode->ID==searchID){
pTempNode->Next=pCurNode->Next;
free(pCurNode);
break;
}
pTempNode=pCurNode;
pCurNode=pCurNode->Next;
}
if(pCurNode==NULL)
printf("没找到此学生");
else
printf("删除学生信息成功!:\n");
write();
}

//输出学生信息
void printInformation(struct Student * pHeader){
struct Student * pCurNode;
pCurNode=(struct Student*)malloc(sizeof(struct Student));
pCurNode=pHeader;
while(pCurNode->Next!=NULL){
pCurNode=pCurNode->Next;
printf("学生姓名:%s\n学生学号:%d\n学生性别:%s\n学生班级: %s\n学生c语言成绩: %d\n,学生英语语言成绩: %d\n,学生数学语言成绩: %d\n",
pCurNode->name,pCurNode->ID,pCurNode->sex,pCurNode->group,pCurNode->cScore,pCurNode->eScore,pCurNode->mScore);
}
printf("输出学生信息成功!");
}

//插入一个学生的信息
void insert(){
int IDBefore;
struct Student * pCurNode;
struct Student * pNewNode;
pCurNode = (struct Student*)malloc(sizeof(struct Student));

printf("请输入每个学生的学号,姓名,性别,班级,c语言成绩,英语成绩,数学成绩:\n");

pNewNode=(struct Student*)malloc(sizeof(struct Student));
scanf("%d%s%s%s%d%d%d",&pNewNode->ID,pNewNode->name,pNewNode->sex,pNewNode->group,&pNewNode->cScore,&pNewNode->eScore,&pNewNode->mScore);
// printf("输入要增加学生的前一个学生的学号\n");
// scanf("%d",&IDBefore);

pCurNode=pHeader;
pNewNode->Next=pCurNode->Next;
pCurNode->Next=pNewNode;
write();
printf("输出插入后学生的所有信息!\n");
show();
write();
}

//查找一个学生的信息
void research()
{
int ID;
printf("输入查找学生的信息(学号):\n");
scanf("%d",&ID);
struct Student * pCurNode=pHeader->Next;
while(pCurNode!=NULL)
{
if(pCurNode->ID==ID)
{

printf("学生姓名:%s\n学生学号:%d\n学生性别:%s\n学生班级: %s\n学生c语言成绩: %d\n学生英语语言成绩: %d\n学生数学语言成绩: %d\n",
pCurNode->name,pCurNode->ID,pCurNode->sex,pCurNode->group,pCurNode->cScore,pCurNode->eScore,pCurNode->mScore);

}
pCurNode=pCurNode->Next;
}
printf("查找学生信息完成!\n");
write();
}
//修改一个学生的信息
void modify()
{
int ID;
show();
printf("输入修改学生的信息(学号):\n");
scanf("%d",&ID);
struct Student * pCurNode=pHeader->Next;
while(pCurNode!=NULL)
{
if(pCurNode->ID==ID)
{
printf("学生学号:%d\n学生姓名:%s\n学生性别:%s\n学生班级: %s\n学生c语言成绩: %d\n学生英语语言成绩: %d\n学生数学语言成绩: %d\n",
pCurNode->ID,pCurNode->name,pCurNode->sex,pCurNode->group,pCurNode->cScore,pCurNode->eScore,pCurNode->mScore);
printf("请输入学生修改后的信息:\n");
scanf("%d%s%s%s%d%d%d",&pCurNode->ID,pCurNode->name,pCurNode->sex,pCurNode->group,&pCurNode->cScore,&pCurNode->eScore,&pCurNode->mScore);
printf("修改完成:\n");
printf("学生学号:%d\n学生姓名:%s\n学生性别:%s\n学生班级: %s\n学生c语言成绩: %d\n学生英语语言成绩: %d\n学生数学语言成绩: %d\n",
pCurNode->ID,pCurNode->name,pCurNode->sex,pCurNode->group,pCurNode->cScore,pCurNode->eScore,pCurNode->mScore);
}
pCurNode=pCurNode->Next;
}
printf("查找学生信息完成!\n");
write();
}
//按成绩给学生排序

void order()
{
struct Student *p1,*p2,*p3,*p4,*pm1,*pm2;
p1=p2=p3=p4=pHeader;
while(p1->Next!=NULL)
{
p2=p1->Next;
pm1=p3=p1;
pm2=p4=p2;
while(p4->Next!=NULL)
{
p3=p4;
p4=p4->Next;
if(sScore(p4)>sScore(pm2))
{
pm2=p4;
pm1=p3;
}
}

if(p2==pm2)
{
p1=p2;
p2=p2->Next;
}
else
{
p1->Next=pm2;
pm1->Next=pm2->Next;
pm2->Next=p2;
p1=pm2;
}
}
printf("排序完成\n");
write();
}
//显示学生信息

void show()
{
order();
struct Student *pcur;
pcur=pHeader->Next;
printf("学号 姓名 性别 班级 C语言 英语 数学 总分\n");
while(pcur!=NULL)
{
printf("%4d %6s %2s %4s %6d %4d %4d %4d\n",pcur->ID,pcur->name,pcur->sex,pcur->group,pcur->cScore,pcur->eScore,pcur->mScore,sScore(pcur));
pcur=pcur->Next;
}
}

void read()
{
FILE *fp;
fp=fopen("data.dat","r");
struct Student *pcur,*pnew;
pcur=pHeader;
int stuNum=0;
fgetc(fp);
if(!feof(fp))
{
rewind(fp);
while(1)
{
pnew=(struct Student *)malloc(sizeof(struct Student));
fread(pnew,sizeof(struct Student),1,fp);
pcur->Next=pnew;
if(pnew->Next==NULL)
{
break;
}
pcur=pnew;
stuNum++;
}
}

fclose(fp);

}
void write()
{
FILE *fp;
remove("data.dat");
fp=fopen("data.dat","a");
struct Student *pcur;
pcur=pHeader->Next;
while(pcur!=NULL)
{
fwrite(pcur,sizeof(struct Student),1,fp);
pcur=pcur->Next;
}
fclose(fp);
}

void changePass()
{
FILE *fp;
char oldPass[20],inputPass1[20],inputPass2[20];
while(1)
{
fp=fopen("admin.dat","r");
fscanf(fp,"%s",oldPass);
fclose(fp);
printf("请输入原密码\n");
scanf("%s",inputPass1);
if(strcmp(oldPass,inputPass1)!=0)
{
printf("原密码错误\n");
continue;
}
printf("请输入新密码\n");
scanf("%s",inputPass1);
printf("再次输入新密码\n");
scanf("%s",inputPass2);
if(strcmp(inputPass2,inputPass1)!=0)
{
printf("两次输入的密码不一致\n");
continue;
}
fp=fopen("admin.dat","w");
fprintf(fp,"%s",inputPass1);
fclose(fp);
printf("密码修改成功\n");
getch();
break;
}

 


}
/*
//菜单使用
void teachermenu()
{
printf("欢迎使用学生成绩管理系统");
printf("0:关闭程序:\n");
printf("1:如果是第一次使用该系统请按1先输入学生信息:\n");
printf("2:查找学生的信息:\n");
printf("3:插入学生的信息:\n");
printf("4:删除学生的信息:\n");
printf("5:输出学生信息:\n");
printf("6:给学生按学号排序:\n");

}
*/
//菜单使用
void menu1()
{
printf("******老师欢迎您使用成绩管理系统******\n");
printf("* 0.退出系统 *\n");
printf("* 1.输入学生信息 *\n");
printf("* 2.查找学生信息 *\n");
printf("* 3.删除学生信息 *\n");
printf("* 4.插入学生信息 *\n");
printf("* 5.显示学生信息 *\n");
printf("* 6.修改学生信息 *\n");
printf("* 7.修改管理密码 *\n");
printf("**************************************\n");
printf("选择功能(0-7):");
}

posted @ 2019-04-17 17:19  鹿汐  阅读(598)  评论(0编辑  收藏  举报