(求助)数据结构课程设计—学生成绩管理系统;[用双向链表]
											学生成绩管理系统:(要求有:密码模块,录入模块,查找模块,保存数据模块,插入模块,删除模块,排序模块)[用双向链表]   大家帮帮忙,急用啊!										
					
	
				
											只有结构体的哦。
# include <stdio.h> 
# include <stdlib.h> 
# include <string.h> 
# include <conio.h> 
# define N 20 
/*********************自定义函数声明部分**************************/ 
void showheader(); //声明显示表头部分 
int menu(); //声明主菜单函数 
int menu3(); //声明插入功能子菜单函数 
int menu4(); //声明删除功能子菜单函数 
int menu5(); //声明查找功能子菜单函数 
int quanxian(); //声明用户权限管理函数 
void SavePass(); 
struct student shuru(); //声明学生信息录入函数 
void display(struct student); //声明显示函数 
void sort(struct student stu[N],int); //声明排序函数 
void charu(struct student stu[N],int); //声明插入函数 
int del1(struct student stu[N],int); //声明按照学号删除函数 
int del2(struct student stu[N],int); //声明按照姓名删除函数 
void chazhao1(struct student stu[N],int i); //声明按照学号查找函数 
void chazhao2(struct student stu[N],int i); //声明按照姓名查找函数 
/*********定义结构体************/ 
struct student 
{ 
int ID; 
char name[15]; 
char sex; 
float score[3]; 
char *getSex() //构造结构成员 
{ 
if(sex=='g') 
return "女"; 
else 
return "男"; 
} 
float Ave() //构造结构成员 
{ 
return (score[0]+score[1]+score[2])/3; 
} 
student() //构造函数 
{ 
score[0]=0; 
score[1]=0; 
score[2]=0; 
} 
}; 
/****************************主函数开始**************************/ 
void main() 
{ 
struct student stu[N]; 
int count=0,m=0,j; 
char ch,ch1; 
int choice,choice3,choice4,choice5; //菜单选项及子菜单选项 
int user; 
do //此循环体控制用户信息输入错误后是否重输 
{ 
user=quanxian(); //调用拥护权限函数 
system("cls"); 
if(user==1) //此条件结构判断用户权限输入是否正确 
{ 
do //此循环体控制返回主菜单 
{ ch1='n'; //如果用户将主菜单选择错误,可用此变量控制是否重输 
choice=menu(); 
system("cls"); 
switch(choice) //此条件结构控制选择菜单功能后的操作 
{ 
case 1: //输入学生信息 
{ 
do //此循环体控制是否继续输入 
{ printf("****************************** 学员信息录入 **********************************\n"); 
printf("\n\n请输入第%d个学员的成绩:\n\n",count+1); 
stu[count]=shuru(); //调用输入函数 
printf("\n\n是否继续(y/n)"); 
fflush(stdin); 
ch=getchar(); 
count++; 
system("cls"); 
}while(ch=='y'); 
//system("pause"); 
break; 
} 
case 2: //显示排序好的学生信息 
{ 
printf("****************************** 学员信息显示 **********************************\n"); 
printf("\n\n排序后的成绩如下:\n"); 
sort(stu,count); //调用排序函数 
showheader(); 
for(j=0;j<count;j++) 
{ 
display(stu[j]); //调用显示函数 
} 
system("pause"); 
system("cls"); 
break; 
} 
case 3://插入功能 
{ 
while(choice3!=3) //此循环体控制是否退出子菜单 
{ 
system("cls"); 
choice3=menu3(); //调用子菜单函数 
system("cls"); 
if(choice3==1) //此条件结构控制子菜单选项 
{ 
do //此循环体判断是否继续插入 
{ printf("****************************** 学员信息插入 **********************************\n"); 
charu(stu,count); //调用插入函数 
count++; 
printf("是否继续插入?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
if (choice3==2) //此条件结构控制子菜单选项 
{ 
printf("\n\n插入学生信息后如下:\n"); 
showheader(); 
for(j=0;j<count;j++) 
{ 
display(stu[j]); //调用显示函数 
} 
system("pause"); 
} 
// 
} 
break; 
} 
case 4://删除功能 
{ 
while(choice4!=4) //此循环体控制是否退出子菜单 
{ 
int num; 
system("cls"); 
choice4=menu4(); //调用子菜单函数 
system("cls"); 
if(choice4==1) //此条件结构控制子菜单按照学号删除选项 
{ 
do //此循环体控制是否继续删除 
{ printf("*********************** 按照学号删除学员信息 ************************\n"); 
num=del1(stu,count);//调用删除函数 
//system("cls"); 
if(num==1) 
count--; 
printf("\n是否继续删除?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
if(choice4==2) //此条件结构控制子菜单按照姓名删除选项 
{ 
do //此循环体控制是否继续删除 
{ printf("************************** 按照姓名删除学员信息 ******************************\n"); 
num=del2(stu,count);//调用删除函数 
if(num==1) 
count--; 
printf("\n是否继续删除?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
if(choice4==3) //此条件结构控制子菜单显示删除后的信息选项 
{ 
printf("\n\n删除学生信息后如下:\n"); 
showheader(); 
for(j=0;j<count;j++) 
{ 
display(stu[j]); //调用显示函数 
} 
system("pause"); 
} 
} 
break; 
} 
case 5://查找功能 
{ 
while(choice5!=3) //控制是否继续查找 
{ 
system("cls"); 
choice5=menu5(); //调用查找子菜单函数 
system("cls"); 
if(choice5==1) //控制按照学号查找 
{ 
chazhao1(stu,count);//调用按照学号查找的函数 
system("cls"); 
} 
if(choice5==2) //控制按照姓名查找 
{ 
chazhao2(stu,count);//调用按照姓名查找的函数 
system("cls"); 
} 
system("pause"); 
} 
break; 
} 
case 6://退出 
{ 
printf("确认退出?(y/n)"); //让用户确认是否退出 
fflush(stdin); 
ch=getchar(); 
break; 
} 
default: 
{ 
printf("\a\a警告:您输入错误,是否重输!(y/n)"); 
fflush(stdin); 
ch1=getchar(); 
system("cls"); 
break; 
} 
} 
}while(ch=='n'|| ch1=='y');//控制是否要退出系统 
} 
if(user==0) 
{ 
printf("\a\a警告:您的用户名或密码输入有误!是否重输?(y/n)"); 
} 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
/*************************主函数结束*************************/ 
/*自定义输入函数*/ 
struct student shuru() 
{ 
struct student stu; 
printf("\n\n学号:"); 
scanf("%d",&stu.ID); 
printf("\n姓名:"); 
scanf("%s",stu.name); 
printf("\n性别(g/b):"); 
fflush(stdin); 
scanf("%c",&stu.sex); 
printf("\n语文成绩:"); 
scanf("%f",&stu.score[0]); 
printf("\n数学成绩:"); 
scanf("%f",&stu.score[1]); 
printf("\n英语成绩:"); 
scanf("%f",&stu.score[2]); 
return stu; 
} 
/*自定义显示函数*/ 
void display(struct student stu) 
{ 
int j; 
printf("\t%d\t",stu.ID); 
printf("%s\t",stu.name); 
printf("%s\t",stu.getSex()); 
for(j=0;j<3;j++) 
{ 
printf("%.2f\t",stu.score[j]); 
} 
printf("%.2f\t",stu.Ave()); 
putchar('\n'); 
} 
/*自定义排序函数*/ 
void sort(struct student stu[N],int i) 
{ 
int j,k; 
struct student temp; 
for(j=0;j<i;j++) 
{ 
for(k=0;k<i-j-1;k++) 
{ 
if((stu[k].Ave())<(stu[k+1].Ave())) 
{ 
temp=stu[k]; 
stu[k]=stu[k+1]; 
stu[k+1]=temp; 
} 
} 
} 
} 
/*自定义插入函数*/ 
void charu(struct student stu[N],int k) 
{ 
int i,l; 
struct student in ; 
in=shuru();//调用输入函数 
for(i=0;i<k;i++) 
{ 
if(in.Ave()>stu[i].Ave()) 
break; 
} 
for(l=k;l>i;l--) 
{ 
stu[l]=stu[l-1]; 
} 
stu[i]=in; 
} 
/*自定义按照学号删除函数*/ 
int del1(struct student stu[N],int i) 
{ 
int dele,j,k; 
char ch; 
printf("请选择学号:"); 
scanf("%d",&dele); 
for(j=0;j<i;j++) 
{ 
if(dele==stu[j].ID) 
{ 
break; 
} 
} 
if(j<i) 
{ 
printf("这是您要删除的学生信息\n"); 
showheader(); 
display(stu[j]); 
printf("确认删除?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
if(ch=='y') 
{ 
for(k=j+1;k<i;k++) 
{ 
stu[k-1]=stu[k]; 
} 
printf("删除成功"); 
return 1; 
} 
else 
{ 
return 0; 
} 
} 
else 
{ 
printf("不存在您要删除的信息"); 
return 0; 
} 
} 
/*自定义按照姓名删除函数*/ 
int del2(struct student stu[N],int i) 
{ 
int j,k; 
char name[15],ch; 
printf("请输入姓名:"); 
scanf("%s",&name); 
for(j=0;j<i;j++) 
{ 
if(strcmp(name,stu[j].name)==0) 
{ 
break; 
} 
} 
if(j<i) 
{ 
printf("这是您要删除的学生信息\n"); 
showheader(); 
display(stu[j]); 
printf("确认删除?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
if(ch=='y') 
{ 
for(k=j+1;k<i;k++) 
{ 
stu[k-1]=stu[k]; 
} 
printf("删除成功"); 
return 1; 
} 
else 
{ 
return 0; 
} 
} 
else 
{ 
printf("不存在您要删除的信息"); 
return 0; 
} 
} 
/*自定义主菜单函数*/ 
int menu() 
{ int choice; 
printf("\t\t****************************************************\n\n\t\t\t 欢迎进入学生成绩管理系统 (GLY 1.0版)\n\n\t\t****************************************************\n\n"); 
printf("\t\t\t***************主菜单***************\n\n"); 
printf("\t\t\t\t1> 学生信息录入\n\n"); 
printf("\t\t\t\t2> 学生信息显示\n\n"); 
printf("\t\t\t\t3> 插入学生信息\n\n"); 
printf("\t\t\t\t4> 删除学生信息\n\n"); 
printf("\t\t\t\t5> 查找学生信息\n\n"); 
printf("\t\t\t\t6> 退出\n"); 
printf("\n\n请选择功能选项:"); 
scanf("%d",&choice); 
return choice; 
} 
/*自定义插入功能子菜单函数*/ 
int menu3() 
{ printf("\t*******************这里显示的是插入功能子菜单*******************\n\n"); 
printf("\t\t\t\t1、插入学生信息\n\n"); 
printf("\t\t\t\t2、显示插入后的学生信息\n\n"); 
printf("\t\t\t\t3、退出子菜单,返回上一级菜单\n\n"); 
printf("\n\n请选择功能选项:"); 
int choice3; 
scanf("%d",&choice3); 
return choice3; 
} 
/*自定义删除功能子菜单函数*/ 
int menu4() 
{ 
printf("\t*******************这里显示的是删除功能子菜单*******************\n\n"); 
printf("\t\t\t\t1、按照学号删除学生信息\n\n"); 
printf("\t\t\t\t2、按照姓名删除学生信息\n\n"); 
printf("\t\t\t\t3、显示删除后的学生信息\n\n"); 
printf("\t\t\t\t4、退出子菜单,返回上一级菜单\n\n"); 
printf("\n\n请选择功能选项:"); 
int choice4; 
scanf("%d",&choice4); 
return choice4; 
} 
/*自定义按照学号查找函数*/ 
void chazhao1(struct student stu[N],int i) 
{ 
int select,j; 
char ch; 
printf("\t*******************您选择的是按照学号查找:*******************\n\n"); 
do 
{ 
printf("\n\n请输入学号:"); 
scanf("%d",&select); 
for(j=0;j<i;j++) 
{ 
if(select==stu[j].ID) 
{ 
break; 
} 
} 
if(j<i) 
{ 
showheader(); 
display(stu[j]); 
} 
else 
{ 
printf("你查找的信息不存在\n"); 
} 
printf("是否继续查找?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
/*自定义按照姓名查找函数*/ 
void chazhao2(struct student stu[N],int i) 
{ 
int j; 
char name[15]; 
char ch; 
printf("\t*******************您选择的是按照姓名查找:*******************\n\n"); 
do 
{ 
printf("\n\n请输入姓名:"); 
scanf("%s",name); 
for(j=0;j<i;j++) 
{ 
if(strcmp(name,stu[j].name)==0) 
{ 
break; 
} 
} 
if(j<i) 
{ 
showheader(); 
display(stu[j]); 
} 
else 
{ 
printf("你查找的信息不存在\n"); 
} 
printf("是否继续查找?(y/n)"); 
fflush(stdin); 
ch=getchar(); 
system("cls"); 
}while(ch=='y'); 
} 
/*自定义查找功能子菜单函数*/ 
int menu5() 
{ 
printf("\t*******************这里显示的是查找功能子菜单*******************\n\n"); 
printf("\t\t\t\t1、按照学号查找\n\n"); 
printf("\t\t\t\t2、按照姓名查找\n\n"); 
printf("\t\t\t\t3、退出子菜单,返回上一级菜单\n\n"); 
printf("\n\n请选择功能选项:"); 
int choice5; 
scanf("%d",&choice5); 
return choice5; 
} 
/*自定义用户权限函数*/ 
char chrPass[20]; 
int quanxian() 
{ 
char user[15]; 
printf("\t\t*****************************************\n\n\t\t 欢迎您访问学生成绩管理系统 (GLY 1.0版)\n\n\t\t*****************************************\n\n"); 
printf("\n\n\t\t\t提示 用户名:hehe 密码:1982"); 
printf("\n\n\t\t\t用户名:"); 
scanf("%s",user); 
printf("\n\nt\t\t\t密 码:"); 
SavePass(); 
if((strcmp(chrPass,"1982")==0)&&(strcmp(user,"hehe")==0)) 
return 1; 
else 
return 0; 
} 
/*密码显示为"*"的函数*/ 
void SavePass() 
{ 
char chr; 
int count; 
count = 0; 
while((chr=getch())!=13) 
{ 
chrPass[count] = chr; 
printf("*"); 
count++; 
} 
chrPass[count+1] = '\0'; 
} 
/*自定义表头函数*/ 
void showheader() 
{ printf("\n\n\t*********************************************************\n"); 
printf("\t学号\t姓名\t性别\t语文\t数学\t英语\t平均成绩\n"); 
printf("\t*********************************************************\n"); 
}										
					
	
	
	
	      


											
	    

	