数据结构课程设计【学生信息管理系统(烟大版)】
来源:互联网 发布:excel圆环图数据 编辑:程序博客网 时间:2024/05/05 14:47
/* * Copyright (c) 2016, 烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:student.project* 作者:李潇 * 完成日期:2016年12月28日 * 版本号:DEVC++ * * 问题描述:学生信息管理系统,实现信息的输入,显示,插入,查找,删除,排序,修改,浏览,充值与存入文件
* 输入描述: */
代码:
//student.h#ifndef STUDENT_H_INCLUDED#define STUDENT_H_INCLUDED#include <stdio.h>typedef struct Student{ char name[10]; //姓名 char num[10]; //学号 (都是四位 便于排序) char sex;//性别 (w代表女m代表男) int age;//年龄 char phone[10];//电话号码 int score;//总成绩 int wangfei;//网费 int banlance;//校园卡余额}stu;typedef struct LNode{stu data;struct LNode *next;}LinkList;typedef struct manage//管理员{char zhanghao[10];//账号char password[10];//密码}mag;void InitList( LinkList *&L);//初始化链表void ListInsert(LinkList *&L,LinkList *P);//插入新的节点//void ListDelete(LinkList *&L,LinkList *P);//删除节点void menu();//功能菜单void addstu(LinkList *&L);//增加新的学生void deletestu(LinkList *L);//删除学生void changestu(LinkList *L);//改变学生信息void findstu(LinkList *L);//按学号查找学生并输出该生信息void rechange(LinkList *L);//输入学号进行充值功能void paixu(LinkList *L);//按成绩排序排序 void display(LinkList *&L);//浏览全部学生信息 void saveStuDentFile(LinkList * &L);//保存学生信息到文件void readStuDentput (LinkList *&L);//运行前把文件内容读取到电脑内存void welocome();//首界面void wel1();//管理员登陆界面void carry();//执行阶段//bool check(LinkList *&L,int n);//根据学号判断此生存在不存在#endif // STUDENT_H_INCLUDED
// student.cpp#include <iostream>#include <windows.h>using namespace std;#include <malloc.h>#include <string.h>#include <stdio.h> #include <stdlib.h>#include "student.h"LinkList *L=NULL;/******************************************///这些变量用于输入学生相关的信息 char nam[10];//名字char nu[10];//学号char s;//性别int ag;//年龄char ph[10];//号码int sc;//成绩int wf;//网费int bal;//余额/********************************************************* * 功能描述: 首界面 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明: 屏幕会显示a3的颜色并输出登陆界面 ************************************************************/ void welocome()//登陆界面{ system("color a3"); printf("-------------------------------------------------------------------------------------------------------------\n"); printf("\n"); printf(" **************** 欢迎来到烟台大学学生信息管理平台 **************** \n"); printf("\n"); printf(" ********** 制作人:李潇 ********** \n"); printf("\n"); printf(" ****** 班级:计-156-1 ****** \n"); printf("\n"); printf(" ****** ****** \n"); printf("********************************************************************************\n"); printf("-------------------------------------------------------------------------------------------------------------\n"); printf("\n");}/********************************************************* * 功能描述: 管理员登陆界面 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明: 屏幕会显示d3的颜色并输出管理员登陆界面 相应的内容 ************************************************************/ void wel1()//管理员登陆界面{ system("color d4"); printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n"); printf("\n"); printf(" ◇◇◇◇◇◇◇请您输入管理员登陆信息 ◇◇◇◇◇◇◇ \n"); printf("\n"); printf(" ▅▅▅▅▅▅▅ 1. 账号: _________ ▃▃▃▃▃▃▃▃▃▃ \n"); printf("\n"); printf(" ▅▅▅▅▅▅▅ 2. 密码: _________ ▃▃▃▃▃▃▃▃▃▃ \n"); printf("\n"); printf(" ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●● \n"); printf("\n"); printf("★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★\n"); printf("\n");}/********************************************************* * 功能描述: 功能菜单 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明: 屏幕会显示c4的颜色并输出功能菜单栏 ************************************************************/ void menu()//功能菜单{system("color c4"); printf("|______________________________________________________________|\n"); printf("| |\n"); printf("| 学生信息管理系统 |\n"); printf("| |\n"); printf("| 0、 退出系统 |\n"); printf("| |\n"); printf("| 1、 增加学生信息 |\n"); printf("| |\n"); printf("| 2、 删除某个学生信息 |\n"); printf("| |\n"); printf("| 3、 修改学生信息 |\n"); printf("| |\n"); printf("| 4、 查找某个学生的信息 |\n"); printf("| |\n"); printf("| 5、 充值 |\n"); printf("| |\n"); printf("| 6、 对学生成绩进行排序 |\n"); printf("| |\n"); printf("| 7、浏览全部学生信息 |\n"); printf("| |\n"); printf("| ⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙ |\n"); printf("|______________________________________________________________|\n"); return ;}/********************************************************* * 功能描述: 执行阶段 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明: 屏幕会显示c4的颜色并输出功能菜单栏 ************************************************************/ void carry()//执行阶段{ LinkList *L; InitList(L); readStuDentput (L);//运行前把文件内容读取到电脑内存 int choose; while(1) { printf("请输入您要选择的功能键:\n"); menu();//功能菜单 scanf("%d",&choose); switch(choose) { case 0://退出系统 printf("谢谢使用!欢迎下次光临"); break; case 1://增加学生信息 addstu(L);//增加新的学生 break; case 2://删除所有学生信息 deletestu(L);//删除学生 break; case 3://改变个学生的信息 changestu(L);//改变学生信息 break; case 4://查找某个学生的信息 findstu(L);//按学号查找学生并输出该生信息 break; case 5:// 充值 rechange(L);//输入学号进行充值功能 break; case 6:// 对学生成绩进行排序 paixu(L); break; case 7://输出所有学生的信息 display(L); break; default: printf("请输入正确的选择\n"); break; } }}/********************************************************* * 功能描述: 初始化链表 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明: 头结点本无信息,在这里给头结点附相应的值是为了读取文件那不读入头结点的内容 ************************************************************/ void InitList( LinkList *&L)//初始化链表{ L=(LinkList *)malloc(sizeof(LinkList)); strcpy(L->data.num,"xx");//把后者的内容拷贝到前者中strcpy(L->data.name,"xx");//把后者的内容拷贝到前者中L->data.sex=0;L->data.age=0;strcpy(L->data.phone,"xx");//把后者的内容拷贝到前者中L->data.score=0;L->data.wangfei=0;L->data.banlance=0; 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; }}/********************************************************* * 功能描述: 增加新的学生 * 输入描述: 新增的学生相关信息 * 输出描述: 此生存在会输出"该生已存在" * 返回值 : 无 * 其它说明: ************************************************************/ void addstu(LinkList *&L)//增加新的学生{system("color f2"); printf("请输入学生的信息:\n"); printf("学号:"); scanf("%s",nu); printf("%s\n",nu) ; //判断 LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.num,nu)==0) { printf("该生已存在\n"); break; } q=q->next; } if(q==NULL) { LinkList *p; InitList(p); strcpy(p->data.num,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("%d",&sc); // printf("%d\n",sc); p->data.score=sc; printf("网费:"); scanf("%d",&wf); // printf("%d\n",wf); p->data.wangfei=wf; printf("余额:"); scanf("%d",&bal); // printf("%d\n",bal); p->data.banlance=bal; printf("电话号码:"); scanf("%s",ph); //printf("%s\n",ph); strcpy(p->data.phone,ph);//把后者的内容拷贝到前者中 ListInsert(L,p); saveStuDentFile(L);//保存学生信息到文件 }}/********************************************************* * 功能描述: 删除学生 * 输入描述: 要删除学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 链表本身为空时会输出"还没有学生信息请增加学生信息" * 返回值 : 无 * 其它说明: ************************************************************/ void deletestu(LinkList *L)//删除某个学生{system("color f4"); printf("请输入您要删除的学生的学号:"); scanf("%s",nu); LinkList *p,*pre; if(L->next==NULL){printf("还没有学生信息,请增加学生信息\n");return;}pre=L;p=pre->next;int judge=0;while(p){ if(strcmp(p->data.num,nu)==0) { judge=1; pre->next =p->next; free(p); p=NULL; printf("删除学生成功\n"); saveStuDentFile(L);//保存学生信息到文件 break; } pre=p; p=p->next; }if(judge==0) printf("该生不存在\n");}/********************************************************* * 功能描述: 修改学生信息 * 输入描述: 要修改学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出相应的修改信息的语句 * 返回值 : 无 * 其它说明: ************************************************************/ void changestu(LinkList *L)//改变学生信息{int judge=1;system("color e4"); printf("请输入您要修改学生的学号:\n"); scanf("%s",nu); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.num,nu)==0) { judge=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",ph); printf("修改的电话号码为:%s\n",ph); strcpy(q->data.phone,ph);//把后者的内容拷贝到前者中 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(judge==1) { printf("该生不存在\n"); }}/********************************************************* * 功能描述: 查找学生信息 * 输入描述: 要查找学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出该生的相应修改信息 * 返回值 : 无 * 其它说明: ************************************************************/ void findstu(LinkList *L)//按学号查找学生并输出该生信息{system("color b1"); printf("请输入您要查找的学生的学号:"); scanf("%s",nu); LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.num,nu)==0) { printf("姓名:%s\n",q->data.name); printf("学号:%s\n",q->data.num); printf("性别:%c\n",q->data.sex); printf("年龄:%d\n",q->data.age); printf("电话号码:%s\n",q->data.phone); printf("总成绩:%d\n",q->data.score); printf("网费:%d\n",q->data.wangfei); printf("余额:%d\n",q->data.banlance); break; } q=q->next; } if(q==NULL) printf("该生不存在\n");}/********************************************************* * 功能描述: 充值功能 * 输入描述: 要充值学生的学号 * 输出描述: 此生不存在时会输出“此生不存在” 存在会输出相应的充值信息的语句 * 返回值 : 无 * 其它说明: ************************************************************/ void rechange(LinkList *L)//输入学号进行充值功能{system("color d6"); int choose; printf("请输入您要充值的学生的学号:\n"); scanf("%s",&nu); int money; LinkList *q=L->next; while(q!=NULL ) { if(strcmp(q->data.num,nu)==0) { printf("请输入您要充值的选项 : 1. 网费充值 2.校园卡充值\n"); scanf("%d",&choose); if(choose==1) { printf("请输入您要充值的金额:\n"); scanf("%d",&money); printf("您要充值的金额为%d元\n",money); q->data.wangfei=q->data.wangfei+money; printf("网费充值成功!\n"); printf("%s 同学的网费余额为 %d元",q->data.name,q->data.wangfei); //saveStuDentFile(L);//保存学生信息到文件 } else if(choose==2) { printf("请输入您要充值的金额:\n"); scanf("%d",&money); printf("您要充值的金额为%d元\n",money); q->data.banlance=q->data.banlance+money; printf("校园卡充值成功!\n"); printf("%s 同学的余额为 %d元",q->data.name,q->data.banlance); //saveStuDentFile(L);//保存学生信息到文件 } else printf("请输入正确的选项\n"); break; } q=q->next; } if(q==NULL) printf("该生不存在\n");}/********************************************************* * 功能描述: 排序 * 输入描述: * 输出描述: 不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出按成绩排序后的所有学生信息 * 返回值 : 无 * 其它说明: ************************************************************/ void paixu(LinkList *L)//按成绩排序排序 并输出排序后的结果 {system("color f9");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.num,q->data.num); strcpy(tmp->data.name,q->data.name); strcpy(tmp->data.phone,q->data.phone); tmp->data.sex=q->data.sex; tmp->data.age=q->data.age; tmp->data.score=q->data.score; tmp->data.wangfei=q->data.wangfei; tmp->data.banlance=q->data.banlance; /*再复制p结点信息到q*/ strcpy(q->data.num,p->data.num); strcpy(q->data.name,p->data.name); strcpy(q->data.phone,p->data.phone); q->data.sex=p->data.sex; q->data.age=p->data.age; q->data.score=p->data.score; q->data.wangfei=p->data.wangfei; q->data.banlance=p->data.banlance; /*最后复制exchange结点信息到p*/ strcpy(p->data.num,tmp->data.num); strcpy(p->data.name,tmp->data.name); strcpy(p->data.phone,tmp->data.phone); p->data.sex=tmp->data.sex; p->data.age=tmp->data.age; p->data.score=tmp->data.score; p->data.wangfei=tmp->data.wangfei; p->data.banlance=tmp->data.banlance; } q=q->next; } r=r->next; } saveStuDentFile(L);//保存学生信息到文件printf("排序后的学生信息是:\n");display(L); }/********************************************************* * 功能描述: 浏览全部学生信息 * 输入描述: * 输出描述: 不存在学生时会输出"还没有学生信息,请增加学生信息" 不然就输出所有学生信息 * 返回值 : 无 * 其它说明: ************************************************************/ void display(LinkList *&L)//浏览全部学生信息 {LinkList *q=L->next;if(q==NULL){printf("还没有学生信息,请增加学生信息\n");return;}while(q){system("color c0");printf(" 学号:%s 名字:%s 年龄:%d 性别:%c 电话号码:%s 总成绩:%d 网费: %d 校园卡余额:%d \n",q->data.num,q->data.name,q->data.age,q->data.sex,q->data.phone,q->data.score,q->data.wangfei,q->data.banlance);q=q->next;}}/********************************************************* * 功能描述: 保存学生信息到文件 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明:把学生信息保存到此文件夹中 ************************************************************/ void saveStuDentFile(LinkList * &L)//保存学生信息到文件{FILE *fp; //WORK*p;//p = worker;LinkList *p=L->next;if((fp=fopen("student.txt","w"))==NULL)// 以可写的方式打开当前目录下的.txt{printf("Can not open the file,press any key exit!");exit(1);}//fprintf(fp,"学号 姓名 性别 年龄 电话 总成绩 网费 校园卡余额\n");while(p){//printf("*******\n");//display(p);fprintf(fp,"%s %s %c %d %s %d %d %d\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.phone,p->data.score,p->data.wangfei,p->data.banlance);p=p->next; }fclose(fp);}/********************************************************* * 功能描述: 读文件 * 输入描述: 无 * 输出描述: 无 * 返回值 : 无 * 其它说明:运行前把学生信息读到电脑内存中 首先以只读的方式打开文件进行计数 i 然后再把这i个学生信息读入到电脑内存 ************************************************************/ void readStuDentput (LinkList *&L) //运行前把文件内容读取到电脑内存{FILE *fp; fp=fopen("student.txt","rb"); //以只读方式打开当前目录下的.txt if(fp==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int i=0; while(!feof(fp)){//LinkList *p=(LinkList *)malloc(sizeof(LinkList));char nam[10];//名字char nu[10];//学号char s;//性别int ag;//年龄char ph[10];//号码int sc;//成绩int wf;//网费int bal;//余额 //fscanf(fp,"%s %s %c %d %s %d %d %d",p->data.num,p->data.name,&p->data.sex,&p->data.age,p->data.phone,&p->data.score,&p->data.wangfei,&p->data.banlance); fscanf(fp,"%s %s %c %d %s %d %d %d",nu,nam,&s,&ag,ph,&sc,&wf,&bal);i++;}fclose(fp); FILE *FP; FP=fopen("student.txt","rb"); //以只读方式打开当前目录下的.txt if(FP==NULL) { printf("无法打开文件\n"); exit(0); //-------- 终止程序 --------- } int b=i-1;int j=1;while(!feof(FP)){ fscanf(FP,"%s %s %c %d %s %d %d %d",nu,nam,&s,&ag,ph,&sc,&wf,&bal); //fscanf(FP,"%s %s %c %d %s %d %d %d",n->data.num,n->data.name,&n->data.sex,&n->data.age,n->data.phone,&n->data.score,&n->data.wangfei,&n->data.banlance); LinkList *n=(LinkList *)malloc(sizeof(LinkList)); strcpy(n->data.num,nu);//把后者的内容拷贝到前者中 strcpy(n->data.name,nam);//把后者的内容拷贝到前者中 n->data.sex=s; n->data.age=ag; strcpy(n->data.phone,ph);//把后者的内容拷贝到前者中 n->data.score=sc; n->data.wangfei=wf; n->data.banlance=bal;ListInsert(L,n);//插入新的节点n=n->next; if(j==b) break; j++;} fclose(FP); //----关闭文件----}
//main.cpp/********************************************************* * 功能描述: 主函数 * 输入描述:管理员账号和密码 * 输出描述: 无 根据选项各有不同 * 返回值 : 0 * 其它说明:首先是清屏 然后暂停十秒 之后是输入信息 如果进入系统此时屏幕会显示不同的颜色并输出相应东西 ************************************************************/ #include <stdio.h>#include "student.h"#include <string.h>#include <stdlib.h>#include <windows.h>#include <string.h> #include <iostream>using namespace std;int main(){ //LinkList *L=NULL; system("cls");//清屏 welocome();//登陆界面 Sleep(10000);//延缓十秒 mag a; strcpy(a.zhanghao,"lixiao");//把后者的内容拷贝到前者中 strcpy(a.password,"123");//把后者的内容拷贝到前者中 wel1();//管理员登陆界面 /* printf("请输入您的账号和密码:\n"); printf("账号: ") ; scanf("%s",a.zhanghao); printf("密码:"); scanf("%s",a.password); printf("●●●●●●●●●●\n"); printf("恭喜%s 已经成为本系统的管理员\n",a.zhanghao); */ char zh[10];//管理员的账号 char m[10];//密码 printf("请输入管理员登录账号和密码:\n");printf("账号:"); scanf("%s",zh);printf("密码:"); scanf("%s",m); //判断名字和密码 if((strcmp(zh,a.zhanghao)==0) && (strcmp(m,a.password)==0)) { carry();//执行阶段 } else printf("姓名或密码不对"); return 0;}
运行结果:
1 0
- 数据结构课程设计【学生信息管理系统(烟大版)】
- 数据结构课程设计---学生信息管理系统
- 数据结构课程设计-学生信息管理系统
- 数据结构课程设计学生信息管理系统
- 数据结构课程设计-------学生信息管理系统
- 数据结构课程设计--学生信息管理系统
- 数据结构课程设计论文--学生信息管理系统
- 数据结构课程设计—学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计之学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计-学生各方面信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计-学生信息管理
- 数据结构课程设计-学生信息管理
- 课程设计--学生信息管理系统
- 学生信息管理系统(课程设计)
- linux 内核机制
- 21. Spring Boot过滤器、监听器【从零开始学Spring Boot】
- .net mvc 部署到IIS 报错403.14 - forbidden
- SQL Server 存储(4/8):理解Page Free Space (PFS) 页
- 线上服务的JVM参数配置
- 数据结构课程设计【学生信息管理系统(烟大版)】
- 我为什么想写博客
- 慧与软件实训 day1 linux常用命令,vi,gcc编译
- error C3861: "_beginthreadex": 找不到标识符
- SQL Server 存储(5/8):理解IAM 页
- Android定位--GPS定位与LBS基站定位
- 怎么用wordpress建中英文双语及多语言切换的网站
- Swift - 去处图片的白色、黑色背景(使UIImage背景透明)
- SQL Server存储(6/8) :理解DCM页