学生管理系统开发
来源:互联网 发布:mac图片导出到硬盘 编辑:程序博客网 时间:2024/06/05 01:03
/*
*Copyright (c)2017,烟台大学计算机与控制工程学院
*All rights reservrd.
*作者:李欣豪
*完成时间:2017年12月21日
*版本号:v1.0
*问题描述:
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作
(2)学生信息录入功能(学生信息用文件保存)
(3)学生信息浏览功能---输出
(4)查询、排序功能
按学号查询
按姓名查询
(5)学生信息的删除与修改
流程图:
一、头文件
/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: guanli.h* 文件标识:无* 内容摘要:该代码用于函数声明及结构体构建* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/
#ifndef LINKLIST_H_INCLUDED#define LINKLIST_H_INCLUDEDtypedef struct student{char number[20]; //学号nu char name[20]; //姓名namint age; //年龄agchar sex; //性别sint score; //成绩 scchar address[20]; //地址addchar call[20]; //电话cachar mail[20]; //E-mail ma}stu;typedef struct LNode //定义单链表结点类型{ stu data; struct LNode *next; //指向后继结点}LinkList;void InitList(LinkList *&L);//初始化链表void ListInsert(LinkList *&L,LinkList *P);//插入新的节点void addstu(LinkList *&L);//增加新的学生void display(LinkList *&L); //浏览全部学生信息void deletestu(LinkList *L); //删除某个学生信息void changestu(LinkList *L); //修改学生信息void findstu(LinkList *L); //按照学号查找学生信息void findstu2(LinkList *L); //按照姓名查找学生信息void paixu(LinkList *L); //按成绩排序排序 并输出排序后的结果void saveStuDentFile(LinkList * &L); //保存学生信息到文件#endif // LINKLIST_H_INCLUDED
二、源文件
/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: guanli.cpp* 文件标识:无* 内容摘要:该代码用于函数的定义* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/
#include <stdio.h>#include <malloc.h>#include <iostream>#include "guanli.h"using namespace std;char nam[20];//名字 char nu[20];//学号 char s;//性别 int ag;//年龄 char ca[20];//电话 int sc;//成绩char add[20];//地址char ma[20];//E-mail /********************************************************** 功能描述:初始化链表* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void InitList( LinkList *&L)//初始化链表 { L=(LinkList *)malloc(sizeof(LinkList)); strcpy(L->data.number,"xx");//把后者的内容拷贝到前者中 strcpy(L->data.name,"xx");//把后者的内容拷贝到前者中 L->data.sex=0; L->data.age=0; strcpy(L->data.call,"xx");//把后者的内容拷贝到前者中 L->data.score=0; strcpy(L->data.address,"xx"); strcpy(L->data.mail,"xx"); L->next=NULL; } /********************************************************** 功能描述:插入新的节点* 输入参数: 无* 输出参数: 无* 返回值:无* 其它说明:调用了初始化链表函数************************************************************/void ListInsert(LinkList *&L,LinkList *p)//插入新的节点{LinkList *q=NULL;q=L;if(q->next==NULL){q->next=p;p->next=NULL;}else{p->next=q->next;q->next=p;}}/********************************************************** 功能描述:增加新的学生* 输入参数: nu 学号;nam 姓名;s 性别;ag 年龄;ca 电话;sc 成绩;add 地址;ma E-mail* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void addstu(LinkList *&L)//增加新的学生 { printf("请输入学生的信息:\n"); printf("学号:"); scanf("%s",nu); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.number,nu)==0) { printf("该生已存在\n"); break; } q=q->next; } if(q==NULL) { LinkList *p; InitList(p); strcpy(p->data.number,nu);//把后者的内容拷贝到前者中 printf("姓名:") ; scanf("%s",nam) ; // printf("%s\n",nam); strcpy(p->data.name,nam);//把后者的内容拷贝到前者中 printf("性别:(w为男 m为女)"); scanf(" %c",&s); //printf("%c\n",s); p->data.sex=s; printf("年龄:"); scanf("%d",&ag); // printf("%d\n",ag); p->data.age=ag; printf("电话号码:"); scanf("%s",ca); //printf("%s\n",ph); strcpy(p->data.call,ca);printf("成绩:"); scanf("%d",&sc); p->data.score=sc; printf("地址:"); scanf("%s",add); //printf("%s\n",add); strcpy(p->data.address,add);printf("E-mail:"); scanf("%s",ma); //printf("%s\n",ma); strcpy(p->data.mail,ma);ListInsert(L,p);saveStuDentFile(L);//保存学生信息到文件 } }/********************************************************** 功能描述:浏览全部学生信息* 输入参数: 无* 输出参数: q->data.number,q->data.name,q->data.age,q->data.sex, q->data.call,q->data.score,q->data.address,q->data.mail* 返回值: 无* 其它说明:无************************************************************/void display(LinkList *&L)//浏览全部学生信息 { LinkList *q=L->next; if(q==NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } while(q!=NULL) { printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 电话号码:%s 成绩:%d 地址: %s E-mail:%s \n",q->data.number,q->data.name,q->data.age,q->data.sex, q->data.call,q->data.score,q->data.address,q->data.mail); q=q->next; } } /********************************************************** 功能描述:删除某个学生* 输入参数: nu 学号* 输出参数:无* 返回值: 无* 其它说明:无************************************************************/void deletestu(LinkList *L) //删除某个学生 { printf("请输入您要删除的学生的学号:"); scanf("%s",nu); LinkList *p,*pre; if(L->next==NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } pre=L; p=pre->next; int j=0; while(p!=NULL) { if(strcmp(p->data.number,nu)==0) { j=1; pre->next =p->next; free(p); p=NULL; printf("删除学生成功\n"); saveStuDentFile(L);//保存学生信息到文件 break; } pre=p; p=p->next; } if(j==0) printf("该生不存在\n"); } /********************************************************** 功能描述:改变学生信息* 输入参数: nu 学号 nam 名字 ca 电话;sc成绩;ag年龄* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void changestu(LinkList *L)//改变学生信息 { int j=1; printf("请输入您要修改学生的学号:\n"); scanf("%s",nu); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.number,nu)==0) { j=0; printf("请输入您要修改的信息选项:1.姓名 2. 电话号码 3. 成绩 4.年龄 \n"); int n; scanf("%d",&n); switch(n) { case 1: printf("请输入您要修改的名字:"); scanf("%s",nam); printf("修改的名字为:%s\n",nam); strcpy(q->data.name,nam);//把后者的内容拷贝到前者中 printf("修改名字成功!\n");saveStuDentFile(L);//保存学生信息到文件 break; case 2: printf("请输入您要修改的电话号码:"); scanf("%s",ca); printf("修改的电话号码为:%s\n",ca); strcpy(q->data.call,ca);//把后者的内容拷贝到前者中 printf("修改电话号码成功!\n"); saveStuDentFile(L);//保存学生信息到文件 break; case 3: printf("请输入您要修改的成绩"); scanf("%d",&sc); printf("修改的总成绩为:%d\n",sc); q->data.score=sc; printf("修改成绩成功!\n"); saveStuDentFile(L);//保存学生信息到文件 break; case 4: printf("请输入您要修改的年龄:"); scanf("%d",&ag); printf("修改的年龄为:%d\n",ag); q->data.age=ag; printf("修改年龄成功!\n"); saveStuDentFile(L);//保存学生信息到文件 break; default : printf("请输入正确的选项\n"); break; } } q=q->next; } if(j==1) { printf("该生不存在\n"); } } /********************************************************** 功能描述:按学号查找学生并输出该生信息* 输入参数: nu学号* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void findstu(LinkList *L) //按学号查找学生并输出该生信息 { printf("请输入您要查找的学生的学号:"); scanf("%s",nu); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.number,nu)==0) { printf("姓名:%s\n",q->data.name); printf("学号:%s\n",q->data.number); printf("性别:%c\n",q->data.sex); printf("年龄:%d\n",q->data.age); printf("电话号码:%s\n",q->data.call); printf("成绩:%d\n",q->data.score); printf("地址:%s\n",q->data.address); printf("E-mail:%s\n",q->data.mail); break; } q=q->next; } if(q==NULL) printf("该生不存在\n"); } /********************************************************** 功能描述:按姓名查找学生并输出该生信息* 输入参数: nam姓名* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void findstu2(LinkList *L) //按姓名查找学生并输出该生信息 { printf("请输入您要查找的学生的姓名:"); scanf("%s",nam); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.name,nam)==0) { printf("姓名:%s\n",q->data.name); printf("学号:%s\n",q->data.number); printf("性别:%c\n",q->data.sex); printf("年龄:%d\n",q->data.age); printf("电话号码:%s\n",q->data.call); printf("成绩:%d\n",q->data.score); printf("地址:%s\n",q->data.address); printf("E-mail:%s\n",q->data.mail); break; } q=q->next; } if(q==NULL) printf("该生不存在\n"); } /********************************************************** 功能描述:按成绩排序排序 并输出排序后的结果* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void paixu(LinkList *L)//按成绩排序排序 并输出排序后的结果 { LinkList *q,*p,*r=L->next; if(r==NULL) { printf("还没有学生信息,请增加学生信息\n"); return; } while(r) //两层循环完成排序 { p=r; q=r->next; LinkList *tmp;//用于排序时暂存节点 InitList(tmp); while(q) { if(q->data.score > p->data.score) { /*先复制q结点信息到tmp*/ strcpy(tmp->data.number,q->data.number); strcpy(tmp->data.name,q->data.name); strcpy(tmp->data.call,q->data.call); tmp->data.sex=q->data.sex; tmp->data.age=q->data.age; strcpy(tmp->data.address,q->data.address); tmp->data.score=q->data.score; strcpy(tmp->data.mail,q->data.mail); /*再复制p结点信息到q*/ strcpy(q->data.number,p->data.number); strcpy(q->data.name,p->data.name); strcpy(q->data.call,p->data.call); q->data.sex=p->data.sex; q->data.age=p->data.age; strcpy(q->data.address,p->data.address); q->data.score=p->data.score; strcpy(q->data.mail,p->data.mail); /*最后复制exchange结点信息到p*/ strcpy(p->data.number,tmp->data.number); strcpy(p->data.name,tmp->data.name); strcpy(p->data.call,tmp->data.call); p->data.sex=tmp->data.sex; p->data.age=tmp->data.age; strcpy(p->data.address,tmp->data.address); p->data.score=tmp->data.score; strcpy(p->data.mail,tmp->data.mail); } q=q->next; } r=r->next; }saveStuDentFile(L);//保存学生信息到文件 printf("排序后的学生信息是:\n"); display(L); } /********************************************************** 功能描述:保存学生信息到文件* 输入参数: 无* 输出参数: 无* 返回值: 无* 其它说明:无************************************************************/void saveStuDentFile(LinkList * &L)//保存学生信息到文件 { FILE *fp; //WORK*p; //p = worker; LinkList *p=L->next; if((fp=fopen("student.txt","w"))==NULL)// 以可写的方式打开当前目录下的.txt { printf("无法打开文件,按任意键退出!"); exit(1); } // fprintf(fp,"学号 姓名 性别 年龄 电话 成绩 地址 E-mail\n"); while(p) { //printf("*******\n"); //display(p); fprintf(fp,"%s %s %c %d %s %d %s %s\n",p->data.number,p->data.name,p->data.sex,p->data.age,p->data.call,p->data.score,p->data.address,p->data.mail); p=p->next; } fclose(fp); }
/************************************************************ 版权所有 (C)2017, LiXinhao。** 文件名称: main.cpp* 文件标识:无* 内容摘要:该代码用于功能的实现* 其它说明:无* 当前版本: V1.0* 作 者:李欣豪* 完成日期: 20171220** 修改记录1:* 修改日期: 20171221* 版本号: V1.0* 修改人: LiXinhao* 修改内容:创建**********************************************************/
#include <stdio.h>#include <malloc.h>#include <iostream>#include "guanli.h"using namespace std;/********************************************************** 功能描述:管理员登录,功能的选择* 输入参数: x 管理员密码;n功能的选择* 输出参数: 无* 返回值: 0* 其它说明:无************************************************************/int main(){LinkList *L;InitList(L);cout<<"请输入管理员密码:";char x[20];scanf("%s",x);if(strcmp(x,"0816")==0){while(1){cout<<"********** 欢迎使用学生信息管理平台 **********"<<endl;cout<<endl;cout<<endl; cout<<"(1)学生信息录入"<<endl; cout<<"(2)学生信息浏览"<<endl; cout<<"(3)排序"<<endl; cout<<"(4)按学号查询"<<endl; cout<<"(5)按姓名查询"<<endl; cout<<"(6)学生信息删除"<<endl; cout<<"(7)学生信息修改"<<endl;cout<<"请输入您需要的选项:"; int n;cin>>n;switch(n){case 1:{ addstu(L); cout<<"信息录入成功!"<<endl;break;}case 2:{display(L);break;}case 3:{paixu(L);break;}case 4:{findstu(L);break;}case 5:{findstu2(L);break;}case 6:{deletestu(L);break;}case 7:{changestu(L);break;}}}}else{cout<<"密码错误!"<<endl;} return 0;}
三、运行结果截图
功能一:
功能二:
功能三:
功能四:
功能五:
功能六:
功能七:
文件中的存储:
阅读全文
0 0
- 学生管理系统开发
- Java开发学生管理系统
- iOS开发 ----- 学生管理系统改进版
- 一个学生管理系统
- 学生同学录管理系统
- 学生管理系统
- 销售学生管理系统
- 学生通讯管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生管理系统
- 学生学籍管理系统
- 学生管理系统
- 学生通讯录管理系统
- 学生管理系统
- 学生管理系统源程序
- 学生管理系统源程序
- xml文件序列化方式
- 函数栈帧
- 浅谈IT风投
- 白帽子讲web安全笔记-xss总结
- 安防监控VS个人隐私: 360小水滴今日关闭, 为何网友仍期待公共场所直播?
- 学生管理系统开发
- 请问如何在一个List最开始插入一个元素,其他元素一次向后移动一位?
- 二级购物车+EventBus+自定义View实现加减号
- 自定义View——圆形进度条
- 欧拉筛法与积性函数
- spring + redis
- 购物车
- 【第1145期】打造高可靠与高性能的React同构解决方案
- Repeater的分页