当前位置:文档之家› 学生管理系统最终成果

学生管理系统最终成果

// final.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include
#include //动态存储分配函数头文件
#include //atof函数表头文件
#include


#define LEN sizeof(struct student)

struct student
{
char num[30];
char name[20];
char sex[2]; //m为男,f为女
char borth[5];
char add[15]; //地址
char yuanxi[30];
char into[10]; //入学时间
char out[10]; //预计毕业时间
int grade[5]; //成绩(可根据情况储存6项成绩),当然也可根据情况做适当增加
struct student *next;
};
struct student *creat(void); //新建函数
struct student *open(void); //打开文件函数
void print(struct student *head); //输出函数
struct student *insert(struct student **head); //添加函数
struct student *del(struct student **head); //删除函数
void find(struct student *head); //查找函数
void keep(struct student *head); //存储函数
void search(struct student *head); //成绩查询函数
struct student *change(struct student *head); //学生转系资料修改函数


int main()
{
int number;
struct student *head;
GO:
printf("\t◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n");
printf("\t◇◇ ◇◇\n");
printf("\t◇◇ 学生信息管理系统 ◇◇\n");
printf("\t◇◇ ◇◇\n");
printf("\t◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇\n\n");
printf("\t-------------------请输入选项:-----------------\n1.初次使用,建立数据库;\n2.要读入数据;\n");
scanf("%d",&number);
if(number==1)
head=creat(); //建立链表的函数,返回头指针
else if(number==2)
head=open(); //打开已储存的数据
else {printf("输入有误,请重新输入\n");goto GO;}
do
{
printf("---------------------------------主菜单-------------------------------------\n");
printf("\t\t----------请根据导航选择所需项目----------\n");
printf(" 1.添加新生名单\n");
printf(" 2.删除毕业生信息\n");
printf(" 3.查找学生信息\n");
printf(" 4.储存已有学生数据\n");
printf(" 5.显示所有已储存的数据\n");
printf(" 6.成绩查询\n");
printf(" 7.修改转系学生资料\n");
printf(" 8.退出(注:退出前请确认数据已储存)\n");
scanf("%d",&number);
switch(number)
{
case 1:insert(&head);continue;
case 2:del(&head);continue;
case 3:find(head);continue;
case 4:keep(head);continue;
case 5:print(head);continue;
case 6:search(head);continue;
case 7:change(head);continue;
case 8:{
printf("\n\n ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\n");
printf("★★★★★★★★★★程序已退出,谢谢使用!!!!★★★★★★★★★★\n");
printf("________________________________\n\n\n");
}continue;
default:printf("输入有误,请重新输入\n");continue;
}
}while(number!=8);
return 0;
}



struct student *creat()
{
int n=0;
struct student *head,*p1,*p2;
p1=p2=(struct student *)malloc(LEN);
printf("-----请按学号顺序输入学生信息-----\n\n");
printf("请输入第1个学生的学生号\n");
scanf("%s",p1->num);
printf("请输入第1个学生的姓名\n");
scanf("%s",p1->name);
printf("请输入第1个学生的性别(男为m,女为f)\n");
scanf("%s",p1->sex);
printf("请输入第1个学生的出生年月 /例如9009\n");
scanf("%s",p1->borth);
printf("请输入第1个学生的地址 /例如凌云2-909室,输为l2-909\n");
scanf("%s",p1->add);
printf("请输入第1个学生的院系 /例如信息学院智能科学与技术系,输为:信科-智能\n");
scanf("%s",p1->yuanxi);
printf("请输入第1个学生的入学时间\n");
scanf("%s",p1->into);
printf("请输入第1个学生预计毕业时间\n");
scanf("%s",p1->out);
printf("请输入第1个学生的高数成绩\n");
scanf("%d",&(p1->grade[0]));
printf("请输入第1个学生的离散成绩\n");
scanf("%d",&(p1->grade[1]));
printf("请输入第1个学生的线代成绩\n");
scanf("%d",&(p1->grade[2]));
printf("请输入第1个学生的英语成绩\n");
scanf("%d",&(p1->grade[3]));
printf("请输入第1个学生的物理成绩\n");
scanf("%d",&(p1->grade[4]));
head=NULL;
printf("----------请继续输入,全部输入0表示输入结束----------\n");
while(atof(p1->num)!=0) //将字符串转换成浮点型数
{
n=n+1;
if(n==1)
head=p1;
else {
p2->next=p1;
p2=p1;
}
p1=(struct student *)malloc(LEN); //开辟新的单元
printf("请输入第%d个学生的学生号\n",n+1);
scanf("%s",p1->num);
printf("请输入第%d个学生的姓名\n",n+1);
scanf("%s",p1->name);
printf("请输入第%d个学生的性别(男为m,女为f)\n",n+1);
scanf("%s",p1->sex);
printf("请输入第%d个学生的生日 /例如9009\n",n+1);
scanf("%s",p1->borth);
printf("请输入第%d个学生的地址 /例如凌云2-909室,输为l2-909\n",n+1);
scanf("%s",p1->add);
printf("请输入第%d个学生的院系 /例如信息学院智能科学与技术系,输为:信科-智能\n",n+1);
scanf("%s",p1->yuanxi);
printf("请输入第%d个学生的入学时间\n",n+1);
scanf("%s",p1->into);
printf("请输入第%d个学生预计毕业时间\n",n+1);
scanf("%s",p1->out);
printf("请输入第%d个学生的高数成绩\n",n+1);
scanf("%d",&(p1->grade[0]));
printf("请输入第%d个学生的

离散成绩\n",n+1);
scanf("%d",&(p1->grade[1]));
printf("请输入第%d个学生的线代成绩\n",n+1);
scanf("%d",&(p1->grade[2]));
printf("请输入第%d个学生的英语成绩\n",n+1);
scanf("%d",&(p1->grade[3]));
printf("请输入第%d个学生的物理成绩\n",n+1);
scanf("%d",&(p1->grade[4]));
}
p2->next=NULL;
return(head);
}




struct student * insert(struct student **head) //插入学生信息
{
struct student *stu,*p1,*p2=NULL;
stu=(struct student *)malloc(LEN);
printf("请输入要插入的学生的学号\n");
scanf("%s",stu->num);
printf("请输入要插入的学生的姓名\n");
scanf("%s",stu->name);
printf("请输入要插入的学生的性别(男生为m,女生为f)\n");
scanf("%s",stu->sex);
printf("请输入要插入的学生的生日 /例如9009\n");
scanf("%s",stu->borth);
printf("请输入要插入的学生的地址 /例如凌云2-909室,输为l2-909\n");
scanf("%s",stu->add);
printf("请输入要插入的学生的院系 /例如信息学院智能科学与技术系,输为:信科-智能\n");
scanf("%s",stu->yuanxi);
printf("请输入要插入的学生的入学时间\n");
scanf("%s",stu->into);
printf("请输入要插入的学生的预计毕业时间\n");
scanf("%s",stu->out);
printf("请输入要插入的学生的高数成绩\n");
scanf("%d",&(stu->grade[0]));
printf("请输入要插入的学生的离散成绩\n");
scanf("%d",&(stu->grade[1]));
printf("请输入要插入的学生的线代成绩\n");
scanf("%d",&(stu->grade[2]));
printf("请输入要插入的学生的英语成绩\n");
scanf("%d",&(stu->grade[3]));
printf("请输入要插入的学生的物理成绩\n");
scanf("%d",&(stu->grade[4]));
p1=*head;
if(*head==NULL)
{*head=stu;stu->next=NULL;}
else
{while((strcmp(stu->num,p1->num)>0)&&(p1->next!=NULL))
{
p2=p1;
p1=p1->next;
}
if(strcmp(stu->num,p1->num)<0)
{
if(*head==p1) //p1的位置是头指针
{
*head=stu;
stu->next=p1;
}
else
p2->next=stu;
stu->next=p1;
}
else
{
p1->next=stu;
stu->next=NULL;
}
}
return(*head);
}


void print(struct student *head) //显示信息
{
printf("学号\t\t姓名 性别 生日\t院系\t\t地址\t入学时间 毕业时间\n");
while(head->next!=NULL)
{
printf("%s\t%s\t%s ",head->num,head->name,head->sex);
printf("%s\t%s\t%s\t%s\t %s\n",head->borth,head->yuanxi,head->add,head->into,head->out);
head=head->next;
}
printf("%s\t%s\t%s ",head->num,head->name,head->sex);
printf("%s\t%s\t%s\t%s\t %s\n",head->borth,head->yuanxi,head->add,head->into,head->out);
}

struct student *del(struct student **head) //删除学生信息
{
char s[20];
struct student *p1,*p2=NULL;
printf("请输入要删除的学生的学号");
scanf("%s",s);
if(*head==NULL)
{printf("原数据库为空\n");goto end;}
p1=*head;
while((strcmp(p1->num,s))!=0&&p1->next!=NULL) //*p1指向的不

是所要的找的结点,而且后面还有结点
{p2=p1;p1=p1->next;} //p1后移一个结点
if((strcmp(p1->num,s))==0)
{
if(p1==*head)
*head=p1->next;
else p2->next=p1->next;
printf("已删除%s\n",s);
}
else printf("原数据库没有学号为%s的学生\n",s);
end:
return(*head);
}



void find(struct student *head)
{
int n,k,j;
char s[20];
char t[100];
char x[2];
struct student *p1;
printf("---------------------搜索子菜单---------------------\n");
printf("1.精确查找(最多只输出一组数据)\n2.模糊查找----(如果没有将不输出任何数据)\n");
scanf("%d",&n);
getchar();
if(n==1) //准确查找,最多只输出一组数据
{
printf("-------------------------------请选择查询方式---------------------------------\n");
printf(" 1.按学号查找\n");
printf(" 2.按姓名查找\n");
printf(" 3.按生日查找\n");
printf(" 4.按地址查找\n");
scanf("%d",&k);
getchar();
if(k==1)
{
p1=head;
printf("请输入要查找的学号\n");
gets(s);
while(strcmp(p1->num,s)!=0&&p1->next!=NULL)
p1=p1->next;
if((strcmp(p1->num,s))!=0)
printf("查找不到相应的学生信息,请尝试其他查找方法\n");
else
{
printf("学号\t\t姓名 性别 生日\t院系\t\t地址\t入学时间 毕业时间\n");
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(k==2)
{
p1=head;
printf("请输入要查找的姓名\n");
gets(s);
while(strcmp(p1->name,s)!=0&&p1->next!=NULL)
p1=p1->next;
if((strcmp(p1->name,s))!=0)
printf("★★★★查找不到相应的学生信息,请尝试其他查找方法★★★★\n");
else
{
printf("学号\t\t姓名 性别 生日\t院系\t\t地址\t入学时间 毕业时间\n");
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(k==3)
{
p1=head;
printf("请输入要查找的学生的生日\n");
gets(s);
while((strcmp(p1->borth,s))!=0&&p1->next!=NULL)
p1=p1->next;
if((strcmp(p1->borth,s))!=0)
printf("★★★★查找不到相应的学生信息,请尝试其他查找方法★★★★\n");
else
{
printf("学号\t\t姓名 性别 生日\t院系\t\t地址\t入学时间 毕业时间\n");
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(k==4)
{
p1=head;
printf("请输入要查找的学生的地址\n");
gets(t);

while(strcmp(p1->add,t)!=0&&p1->next!=NULL)
p1=p1->next;
if((strcmp(p1->add,t))!=0)
printf("★★★★查找不到相应的学生信息,请尝试其他查找方法★★★★\n");
else
{
printf("学号\t\t姓名 性别 生日\t院系\t\t地址\t入学时间 毕业时间\n");
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else printf("输入错误\n");
}
else if(n==2)
{
printf("--------------------------请选择查询方式-----------------------------\n");
printf(" 1.按学号查找请按\n");
printf(" 2.按姓名查找请按\n");
printf(" 3.按性别查找请按\n");
printf(" 4.按生日查找请按\n");
printf(" 5.按地址查找请按\n");
printf(" 6.按入学日期查找请按\n");
scanf("%d",&j);
getchar();
if(j==1)
{
p1=head;
printf("请输入要查找的学号\n");
gets(s);
while(p1->next!=NULL)
if(strstr(p1->num,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->next;
}
else p1=p1->next;
if(strstr(p1->num,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(j==2)
{
p1=head;
printf("请输入要查找的姓名\n");
gets(s);
while(p1->next!=NULL)
if(strstr(p1->name,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->next;
}
else p1=p1->next;
if(strstr(p1->name,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(j==3)
{
p1=head;
printf("请输入要查找的性别\n");
scanf("%s",x);
while(p1->next!=NULL)
if(strcmp(p1->sex,x)==0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->next;
}
else p1=p1->next;
if(strcmp(p1->sex,x)==0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(j==4)
{
p1=head;
printf("请输入要查找的学生的生日\n");
gets(s);
while(p1->next!=NULL)
if(strstr(p1->borth,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->n

ext;
}
else p1=p1->next;
if(strstr(p1->borth,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(j==5)
{
p1=head;
printf("请输入要查找的地址\n");
gets(t);
while(p1->next!=NULL)
if(strstr(p1->add,t)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->next;
}
else p1=p1->next;
if(strstr(p1->add,t)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else if(j==6)
{
p1=head;
printf("请输入要查找的学生的入学日期\n");
gets(s);
while(p1->next!=NULL)
if(strstr(p1->into,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=p1->next;
}
else p1=p1->next;
if(strstr(p1->into,s)!=0)
{
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
}
}
else printf("!!!★★输入错误★★!!!\n");
}
else printf("!!!★★输入错误★★!!!\n");
}


void keep(struct student *head) //储存
{
FILE *fp;
struct student *p1,*p2;
char s[100];
int num=1;
p1=head;
p2=head;
while(p2->next!=NULL)
{
p2=p2->next;
num++;
}
printf("请输入要储存的路径与文件名,输入格式为“****.c”\n");
scanf("%s",s);
fp=fopen(s,"w");
fprintf(fp,"%d\n",num);
while(p1->next!=NULL)
{
fprintf(fp,"%s ",p1->num);
fprintf(fp,"%s ",p1->name);
fprintf(fp,"%s ",p1->sex);
fprintf(fp," %s ",p1->borth);
fprintf(fp,"%s ",p1->add);
fprintf(fp," %s ",p1->yuanxi);
fprintf(fp,"%s ",p1->into);
fprintf(fp,"%s ",p1->out);
fprintf(fp,"%d ",p1->grade[0]);
fprintf(fp,"%d ",p1->grade[1]);
fprintf(fp,"%d ",p1->grade[2]);
fprintf(fp,"%d ",p1->grade[3]);
fprintf(fp,"%d ",p1->grade[4]);
p1=p1->next;
}
fprintf(fp,"%s ",p1->num);
fprintf(fp,"%s ",p1->name);
fprintf(fp,"%s ",p1->sex);
fprintf(fp," %s ",p1->borth);
fprintf(fp,"%s ",p1->add);
fprintf(fp," %s ",p1->yuanxi);
fprintf(fp,"%s ",p1->into);
fprintf(fp,"%s ",p1->out);
fprintf(fp,"%d ",p1->grade[0]);
fprintf(fp,"%d ",p1->grade[1]);
fprintf(fp,"%d ",p1->grade[2]);
fprintf(fp,"%d ",p1->grade[3]);
fprintf(fp,"%d ",p1->grade[4]);
fclose(fp);
printf("学生信息数据已保存到%s文件中\n",s);
}


struct student *open(void)
{
FILE *fp;
int i,num;
char s[100];
printf("请输入要打开的文件名,格式为“****.c”\n");
scanf("%s",s);
fp=fopen(s,"r");
fscanf(fp

,"%d",&num);
if(fp==NULL)
{
printf("文件读入出错\n");
return NULL;
}
struct student *p1,*p2,*head;
p1=p2=(struct student *)malloc(LEN);
head=p1;
for(i=0;i{
p2=p1;
fscanf(fp,"%s",p1->num);
fscanf(fp,"%s",p1->name);
fscanf(fp,"%s",p1->sex);
fscanf(fp,"%s",p1->borth);
fscanf(fp,"%s",p1->add);
fscanf(fp," %s ",p1->yuanxi);
fscanf(fp,"%s",p1->into);
fscanf(fp,"%s",p1->out);
fscanf(fp,"%d",&(p1->grade[0]));
fscanf(fp,"%d",&(p1->grade[1]));
fscanf(fp,"%d",&(p1->grade[2]));
fscanf(fp,"%d",&(p1->grade[3]));
fscanf(fp,"%d",&(p1->grade[4]));
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t%s\t%s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
p1=(struct student *)malloc(LEN);
p2->next=p1;
}
p2->next=NULL;
fclose(fp);
return(head);
}


void search(struct student *head)
{
struct student *p1;
char n[30];
printf("请输入要查询的学生学号\n");
scanf("%s",n);
p1=head;
while((strcmp(p1->num,n))!=0&&p1->next!=NULL) //*p1指向的不是所要的找的结点,而且后面还有结点
p1=p1->next;
if((strcmp(p1->num,n))==0)
{
printf("\n------学生成绩信息如下所示-------\n--若没有成绩的科目将以0分代替--\n\n");
printf("姓名\t高数\t离散\t线代\t英语\t物理\n");
printf("%s\t%d\t%d\t%d\t%d\t%d\n",p1->name,p1->grade[0],p1->grade[1],p1->grade[2],p1->grade[3],p1->grade[4]);
}
else printf("★★★★输入有误,没有找到该学生的成绩信息★★★★\n");
}


struct student *change(struct student *head)
{
struct student *p1;
char n[30],y[30];
int m;
CHANGE:
printf("请输入要转系的学生学号\n");
scanf("%s",n);
p1=head;
while((strcmp(p1->num,n))!=0&&p1->next!=NULL) //*p1指向的不是所要的找的结点,而且后面还有结点
p1=p1->next;
if((strcmp(p1->num,n))==0)
{printf("请核实该学生的原始信息\n");
printf("学号\t\t姓名 性别 生日\t 院系\t\t地址\t入学时间 毕业时间\n");
printf("%s\t%s\t%s ",p1->num,p1->name,p1->sex);
printf("%s\t %s %s\t%s\t %s\n",p1->borth,p1->yuanxi,p1->add,p1->into,p1->out);
start:
printf("确认修改请输入1,返回上一级请输入2\n");
scanf("%d",&m);
if(m==1)
{printf("请输入要转入的专业\n");
scanf("%s",y);
strcpy(p1->yuanxi,y);}
else if(m==2)
goto CHANGE;
else
{printf("\n★★★★输入有误,请重新输入★★★★\n");
goto start;}
}
else printf("\n★★★★输入有误,没有找到该学生的信息★★★★\n");
return(head);
}

相关主题
文本预览
相关文档 最新文档