数据结构课程设计--学生信息管理系统
来源:互联网 发布:阜宁新闻网络发言人 编辑:程序博客网 时间:2024/04/25 19:22
stu.h
/***********************************************************************版权所有:2017,zhangcuiping**文件名称:a*文件标识:无*内容摘要:该部分代码用于对一些功能的声明*其他说明:无*当前版本:v1.0*作者:张翠平*完成日期:2017.12.22**修改记录:*修改日期:*版本号:v1.0*修改人:*修改内容:***********************************************************************/#ifndef STU_H_INCLUDED#define STU_H_INCLUDED#include "stdio.h"#include "stdlib.h"#include "string.h"#include <fstream> // 写文件#include "conio.h"# define N sizeof(struct student) //看结构体变量的大小using namespace std;typedef struct student{ char number[20];//学号 char name[20]; //姓名 char age[20];//年龄 char sex[20]; //性别 char add[20]; //地址 char Tel[20]; //电话 char special[20]; //专业 int score;//成绩 struct student *next;//指向后继结点} stu; //为结构体命名//((((((((((((((对功能的声明)))))))))))))))))stu *creatlink( stu * x); //创建链表信息void outfile(stu *x); //保存至文件void print(stu *p); //显示全部信息void findNum(stu *y); //按学号查询信息void findName(stu *y); //按姓名查询信息void insert(stu *x); //插入学生信息stu *sort(stu *x); //按成绩冒泡排序stu *delet(stu *x); //删除信息stu *modify(stu *y); //修改信息int MainMenu(); //主菜单int ManageMenu(); //指导员菜单int FindMenu(); //查询菜单int StudentMenu(); //学生菜单#endif // STU_H_INCLUDED
stu.cpp
/***********************************************************************版权所有:2017,zhangcuiping**文件名称:a*文件标识:无*内容摘要:该部分代码用于自定义函数的程序执行过程书写*其他说明:无*当前版本:v1.0*作者:张翠平*完成日期:2017.12.22**修改记录:*修改日期:*版本号:v1.0*修改人:*修改内容:***********************************************************************/#include <malloc.h>#include "stu.h"int length=0; //初始化链表长度/******************************************************************************************************** 功能描述: 尾插法创建链表* 输入描述: 学生信息* 输出描述: 学生信息添加成功,保存到链表中* 返回值 : x* 其他说明: 无限增加新的学生,但不能重复。********************************************************************************************************/stu *creatlink( stu *x){ stu *p1, *p2,*p3; int a; int i = 1; char choice1; x=p2=(stu *)malloc(N); //创建头结点 p2始终指向尾结点,开始时指向头结点 strcpy(p2->number,"-99999"); //拷贝字符串 x->next = NULL; choice1 = 'y'; for (i = 1; choice1 == 'y'; i++) { p1 = (stu *)malloc(N); printf("===============================================================================\n"); printf("请输入第%d个学生的信息:\n", i); printf("学号:"); scanf("%s", p1->number); printf("\n姓名:"); scanf("%s", p1->name); printf("\n年龄:"); scanf("%s", p1->age); printf("\n性别:"); scanf("%s", p1->sex); printf("\n地址:"); scanf("%s", p1->add); printf("\n电话:"); scanf("%s", p1->Tel); printf("\n专业:"); scanf("%s", p1->special); printf("\n成绩:"); scanf("%d", &p1->score); if (x== NULL) { x=p1; x->next=NULL; //尾结点的next域值为NULL } else { p3=x; while (p3) { if(strcmp(p1->number,p3->number)==0) //判断p1和p3是否重复 { printf("重复!\n"); scanf("%d",&a); while(a!=1) //输入1时才可以重新返回系统主界面 { printf("你输入的数字有误\n"); scanf("%d",&a); } return x; //返回头指针 } p3=p3->next; //指向下一个结点 } p2=x; while (p2) { if(p2->next==NULL) { p2->next=p1; p1->next=NULL; } p2=p2->next; } } length++; //链表长度加1 printf("添加成功!\n"); printf("\n是否继续?(y/n):"); choice1 = getch(); //不回显函数 当用户按下某个字符时 函数自动读取 无需按回车 printf("\n"); } return x; //返回头指针}/******************************************************************************************************** 功能描述: 修改信息* 输入描述: 学生学号* 输出描述: 修改成功,把修改后的放到链表中,替换原来的* 返回值 : y* 其他说明: 可以单项修改学生信息,修改没有的学生会显示 “没有该生” 返回主页面********************************************************************************************************///(((((((((((((修改信息 (可以单项修改学生信息) )))))))))))))stu *modify(stu *y){ int choi; char choice; int cp; char num[20],ch[20]; stu *p; if (y== NULL) { printf("\n请输入要修改学生的学号:"); scanf("%s", num); printf("\n该生不存在!按任意键继续.."); getch(); return y; //返回头指针 (Y为形式参数) } printf("\n请输入要修改学生的学号:"); scanf("%s", num); p=y; while(p) { if(strcmp(p->number, num)!=0) p = p->next; else break; } if(!p) { printf("\n该生不存在!按任意键继续.."); getch(); return y; } printf("学生信息如下:\n"); printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel, p->special, p->score); while(1) { printf("\n请选择要修改的项:\n"); printf("1学号 2 姓名 3 年龄 4 性别 5 地址 6 电话 7 专业 8 成绩\n"); scanf("%d",&choi); printf("请输入修改后的内容:\n"); switch (choi) { case 1: scanf("%s", ch); strcpy(p->number,ch); break; case 2: scanf("%s", ch); strcpy(p->name,ch); break; case 3: scanf("%s", ch); strcpy(p->age,ch); break; case 4: scanf("%s", ch); strcpy(p->sex,ch); break; case 5: scanf("%s", ch); strcpy(p->add,ch); break; case 6: scanf("%s", ch); strcpy(p->Tel,ch); break; case 7: scanf("%s", ch); strcpy(p->special,ch); break; case 8: scanf("%d",&cp); p->score=cp; break; default: break; } printf("修改后学生信息如下:\n"); printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel, p->special, p->score); printf("修改成功!\n"); printf("\n是否要继续修改? \n是y否n: "); choice=getch(); if (choice == 'n') break; } return y;}/******************************************************************************************************** 功能描述: 删除信息* 输入描述: 学生学号* 输出描述: 删除成功并且可以释放空间* 返回值 : y* 其他说明: 删除没有的学生会显示“没有该生”********************************************************************************************************/stu *delet(stu *x){ char num[20]; stu *p,*pre; char choice2; if (x== NULL) { printf("\n错误执行!"); getch(); return x; } printf("\n请输入要删除学生的学号:"); scanf("%s", num); pre=x; int judge=0; p=pre->next; while(p) { if(strcmp(p->number, num)==0) { judge=1; printf("你要删除的信息如下,请确认是否删除:\n"); printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel,p->special,p->score); printf("\n是y,否n:"); //显示要删除的学生的信息// choice2 = getch(); if (choice2 == 'y') { pre->next= p->next; free(p); //释放空间 return x; printf("删除学生成功!\n"); break; } else { printf("没有删除该生!\n"); } } pre=p; p=p->next; } if(judge==0) { printf("该生不存在!按任意键继续..\n"); getch(); return x; } return x;}/******************************************************************************************************** 功能描述: 查询信息(按学号)* 输入描述: 学生学号* 输出描述: 学生信息* 返回值 : 无* 其他说明:查询没有的学生会显示“没有该生”********************************************************************************************************/void findNum(stu *y){ char num[20]; stu *p; if (y== NULL) { printf("\n请输入要查找学生的学号:"); scanf("%s", num); printf("\n该生不存在!按任意键继续.."); getch(); return; } printf("\n请输入要查找学生的学号:"); scanf("%s", num); p=y; while(p) { if(strcmp(p->number, num)!=0) p = p->next; else break; } if(!p) { printf("\n该生不存在!按任意键继续.."); getch(); return ; } printf("您查找的学生信息如下:\n"); printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel, p->special, p->score); printf("按任意键继续.."); getch();}/******************************************************************************************************** 功能描述: 查询信息(按姓名)* 输入描述: 学生姓名* 输出描述: 学生信息* 返回值 : 无* 其他说明:查询没有的学生会显示“没有该生”********************************************************************************************************/void findName(stu *y){ char name[20]; stu *p; if (y== NULL) { printf("\n请输入要查找学生的姓名:"); scanf("%s", name); printf("\n该生不存在!按任意键继续.."); getch(); return; } printf("\n请输入要查找学生的姓名:"); scanf("%s", name); p=y; while(p) { if(strcmp(p->name, name)!=0) p = p->next; else break; } if(!p) { printf("\n该生不存在!按任意键继续.."); getch(); return; } printf("你查找的学生信息如下:\n"); printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel, p->special, p->score); printf("按任意键继续.."); getch();}/******************************************************************************************************** 功能描述: 显示学生信息* 输入描述: 程序指令序号* 输出描述: 已有学生信息* 返回值 : 无*其他说明:********************************************************************************************************/void print(stu *p){ if(p==NULL) { printf("\n该生不存在!按任意键继续.."); getch(); return ; } p = p->next; while (p) { printf("\n学号:%s 姓名:%s 年龄:%s 性别:%s 地址:%s 电话:%s 专业:%s 成绩:%d\n\n", p->number, p->name, p->age, p->sex, p->add, p->Tel, p->special, p->score); p = p->next; } printf("\n按任意键继续.."); getch();}/******************************************************************************************************** 功能描述: 按成绩冒泡排序* 输入描述: 程序指令序号* 输出描述: 排序后的学生信息* 返回值 : x*其他说明:********************************************************************************************************/stu *sort(stu *x){ stu* p1; stu* p2; char number[20];//学号 char name[20]; //姓名 char age[20];//年龄 char sex[20]; //性别 char add[20]; //地址 char Tel[20]; //电话 char special[20]; //专业 int score;//成绩 p1 = x; while (p1!=NULL) { p2 = p1->next; while (p2!=NULL) { if(p2->score<p1->score) //完成数值交换 { strcpy(number, p2->number); strcpy(name, p2->name); strcpy(age, p2->age); strcpy(sex, p2->sex); strcpy(add, p2->add); strcpy(Tel, p2->Tel); strcpy(special, p2->special); score= p2->score; strcpy(p2->number, p1->number); strcpy(p2->name, p1->name); strcpy(p2->age, p1->age); strcpy(p2->sex, p1->sex); strcpy(p2->add, p1->add); strcpy(p2->Tel, p1->Tel); strcpy(p2->special, p1->special); p2->score= p1->score; strcpy(p1->number, number); strcpy(p1->name, name); strcpy(p1->age, age); strcpy(p1->sex, sex); strcpy(p1->add, add); strcpy(p1->Tel, Tel); strcpy(p1->special, special); p1->score= score; } p2 = p2->next; } p1 = p1->next; } print(x); printf("学生信息排序结束!按任意键继续..\n"); getch(); return x;}/******************************************************************************************************** 功能描述: 插入学生信息* 输入描述: 插入位置* 输出描述: 插入成功* 返回值 : 无* 其他说明: 位置大于链表长度时显示“没有找到该位置”********************************************************************************************************/void insert(stu *x){ int num,i; student *p,*q; p=x; printf("请输入你要插入位置: "); scanf("%d",&num); if(num>length)//大于链表长度时 { printf("没有找到该位置.按任意键继续..\n"); } else { printf("请输入你要插入的学生的学号、姓名、年龄、性别、地址、电话、专业、成绩:\n"); q=(stu *)malloc(N); scanf("%s %s %s %s %s %s %s %d",q->number,q->name,q->age,q->sex,q->add,q->Tel,q->special,&q->score); for(i=0; i<num; i++) p=p->next; q->next=p->next; p->next=q; length++; print(x); printf("插入学生信息成功!\n"); return ; } getch();}/******************************************************************************************************** 功能描述: 保存至文件* 输入描述: 无* 输出描述: 学生信息* 返回值 : 无* 其他说明:********************************************************************************************************/void outfile(stu *x){ stu *p=x; FILE *fp; int ch; ofstream outfile("out.txt",ios::app);//以追加的方式录入信息,直接将信息追加到以前文件的末尾 if(!outfile)//未成功打开文件 { exit(1); } fp=fopen("out.txt","r");//执行格式化输入 ch=fgetc(fp); if ( ch==EOF ) //成功 { outfile<<"学号 姓名 年龄 性别 地址 电话 专业 成绩"; outfile<<"\r\n";//回车换行 } p = p->next; while(p) { outfile<<" "<<p->number<<" "<<p->name<<" "<<p->age<<" "<<p->sex<<" "<<p->add<<" "<<p->Tel<<" "<<p->special<<" "<<p->score; outfile<<"\r\n"; p=p->next; } outfile.close(); //检查文件是否结束}//((((((((((((((((((系统主菜单))))))))))))))))))))int MainMenu(){ int a; system("cls"); //清屏 printf(" =========================================================================\n"); printf(" == 欢迎来到学生信息管理系统主菜单!!! ==\n"); printf(" == ==\n"); printf(" == 1.指导员 ==\n"); printf(" == 2.学生 ==\n"); printf(" == 0.退出 ==\n"); printf(" =========================================================================\n"); scanf("%d", &a); return a;}//(((((((((((((((((指导员菜单)))))))))))))))))int ManageMenu(){ int a; system("cls");//清屏 printf("=========================================================================\n"); printf(" 1. 添加学生信息 \n"); printf(" 2. 修改学生信息 \n"); printf(" 3. 删除学生信息 \n"); printf(" 4. 查询学生信息 \n"); printf(" 5. 插入学生信息 \n"); printf(" 6. 显示学生信息 \n"); printf(" 7. 成绩排序显示信息 \n"); printf(" 0. 返 回 \n"); printf("=========================================================================\n"); printf("请输入您要执行的操作代码:"); scanf("%d", &a); return a;}//(((((((((((((((((查询主菜单)))))))))))))))))int FindMenu(){ int a; system("cls");//清屏 printf("=========================================================================\n"); printf("= 1.按学号 =\n"); printf("= 2.按姓名 =\n"); printf("= 0.退出 =\n"); printf("=========================================================================\n"); scanf("%d", &a); return a;}//((((((((((((((((((学生菜单))))))))))))))))))int StudentMenu(){ int a; system("cls");//清屏 printf("=========================================================================\n"); printf(" 1. 查询学生信息 \n"); printf(" 0. 返 回 \n"); printf("=========================================================================\n"); printf("请输入您要执行的操作代码:"); scanf("%d", &a); return a;}
main.cpp
/***********************************************************************版权所有:2017,zhangcuiping**文件名称:a*文件标识:无*内容摘要:该部分代码用于显示模块*其他说明:无*当前版本:v1.0*作者:张翠平*完成日期:2017.12.22**修改记录:*修改日期:*版本号:v1.0*修改人:*修改内容:***********************************************************************/#include "stu.h"int main(){ int nChoose1; int nChoose2; int nChoose3; int nChoose4; int nEnd = 1; int nEnd2 = 1; int nEnd3 = 1; char sName[20]; char sPassword[20]; //choice用于选择对数据执行操作,i循环,a主界面选择// stu *x; x = NULL; while (nEnd) { nChoose1 = MainMenu(); switch (nChoose1) { case 0: nEnd = 0; sort(x); //排序 outfile(x); //将链表内容写入文件 system("cls"); //清屏 printf(" \n 谢 谢 使 用 !!! \n"); break; case 1: printf("请输入指导员账号:\n"); scanf("%s", sName); printf("请输入密码:\n"); scanf("%s", sPassword); if (strcmp(sName,"zcp")!=0) { printf("账号错误!\n"); } else { if (strcmp(sPassword,"123321")!=0) { printf("密码错误!\n"); } else { nEnd2 = 1; while (nEnd2) { nChoose2 = ManageMenu(); switch (nChoose2) { case 1: x= creatlink(x); break; case 2: x= modify(x); break; case 3: x= delet(x); break; case 4: nChoose4 = FindMenu(); switch (nChoose4) { case 1: findNum(x); break; case 2: findName(x); break; default: printf(" 选项输入不正确,无法执行。\n"); break; } break; case 5: insert(x); break; case 6: print(x); break; case 7: x= sort(x); break; case 0: nEnd2 = 0; break; default: printf(" 选项输入不正确,无法执行。\n"); break; } } } } break; case 2: nEnd3 = 1; while (nEnd3) { nChoose3 = StudentMenu(); switch (nChoose3) { case 0: nEnd3 = 0; break; case 1: nChoose4 = FindMenu(); switch (nChoose4) { case 1: findNum(x); break; case 2: findName(x); break; default: printf(" 选项输入不正确,无法执行。\n"); break; } break; default: printf("选项输入不正确,无法执行。\n"); break; } } break; default: printf("选项输入不正确,无法执行。\n"); break; } } return 0;}
运行结果:
知识点总结和心得体会:
把理论应用于实践,让学到的东西实现它本身的价值,用于我们的生活中;
这一学期养成了坚持写博客的习惯,及时把学到的东西放到实践中,这对于学习来说有很大的帮助,在这个平台上也可以看到同行人一些优秀的文章,加深了对本专业的理解。由一开始看着博客教程来规范的书写博客,做一个遵守行业规矩的人,到现在可以自己独立完成博客,并能利用博客,给自己带来收获,充实自己,以后会继续好好利用博客,做一个“规矩的行业中人”;
最后感谢一路走来在学习上不断帮助我的老师和同学们!!!
阅读全文
0 0
- 数据结构课程设计---学生信息管理系统
- 数据结构课程设计-学生信息管理系统
- 数据结构课程设计学生信息管理系统
- 数据结构课程设计-------学生信息管理系统
- 数据结构课程设计--学生信息管理系统
- 数据结构课程设计论文--学生信息管理系统
- 数据结构课程设计—学生信息管理系统
- 数据结构课程设计【学生信息管理系统(烟大版)】
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计之学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计-学生各方面信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计——学生信息管理系统
- 数据结构课程设计-学生信息管理
- 数据结构课程设计-学生信息管理
- 课程设计--学生信息管理系统
- 学生信息管理系统(课程设计)
- SparkSQL01
- cubieboard5 linaro系统安装node
- C# 获取系统当前进程列表
- 1010 只包含因子2 3 5的数
- bzoj 1143:[CTSC2008]祭祀river 二分图最大独立集
- 数据结构课程设计--学生信息管理系统
- android 线程(AsyncTask,Threadhandler,intentService)详解
- 《七点三刻》043期 《妖猫传》上映/百度华为合作/王尼玛不干了…
- 数据结构课程设计图书管理系统
- MYSQL中字段char类型和varchar类型的区别
- 阅读《人类简史》思考的几个问题。
- 面相对象的三大特征
- 科大讯飞将建首个人工智能国家重点实验室
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解