******************************* *版权所有 (c)2015 zhangdong *文件名称:shixun.cpp *文件标识:无 题目描述:学生信息管理系统开发 *其他说明:无 *当前版本:V1.0 *作者:张栋 *完成时间:2015.12.25 *学院:计算机与控制工程学院 *******************************
*代码1:头文件部分
<pre name="code" class="csharp">#ifndef SHIXUN_H_INCLUDED #define SHIXUN_H_INCLUDED typedef struct LNode { //用于存放学生信息节点 int stuNumber; char telenum[50]; int age; char chass[50]; char deptName[50]; char name[20]; struct LNode *next; }LNode,*Link; Link createLink(Link L); //创建一个新的链表输入学生信息 void keepStu(Link L); //保存学生信息 Link stuEntry(); //读取学生信息 void printList(Link L); //打印学生信息 void inserStu(Link L,Link Elem); //插入学生信息 Link prior(Link L,Link p); //找到当前地址元素的前一元素的地址 int searchName(Link L,char n[]); //按姓名查找 int searchNum(Link L,int n); //按学号查找 void deleteElem(Link L,int i); //删除学生信息 int deleName(Link L, char n[]); //按姓名删除 int deleNum(Link L,int n); //按学号删除 void searchWay1(Link L); //按姓名查找(调用searchName) void searchWay2(Link L); //按学号查找(调用searchNum) void searchMenu(Link L); //查找菜单 void alterStu(Link L); //按学号更新学生信息 int count(Link L); //统计有效学生信息的数量 void AddStu(Link L); //添加学生信息 void deteStu(Link L); //主菜单 int mainMenu(); void welcome(); #endif // SHIXUN_H_INCLUDED
</pre><pre name="code" class="csharp">*代码2:部分函数的实现
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include <fstream> #include "shixun.h" #define LEN sizeof(LNode) using namespace std; //****************创建链表******************************** Link createLink(Link L) { //初始化定义函数,声明变量 void inserStu(Link L,Link Elem);//定义插入函数 int count(Link L); int temp; temp=count(L); Link p; int num=1, stuNumber; char telenum[50]; char name[20]; int age; char chass[50]; //开始输出学生信息 while(1) { cout<<"请输入学生的信息:学号,姓名,年龄,班级,电话号码"; cout<<"学号输入负数结束!"; cout<<"请输入学号:"; cin>>stuNumber; if(stuNumber<0) { break; } cout<<"请输入名字:"; getchar(); gets(name); cout<<"请输入年龄:"; cin>>age; cout<<"请输入班级:"; getchar(); gets(chass); cout<<"请输入电话号码:"; getchar(); gets(telenum); if(stuNumber>=0) { p=(Link)malloc(LEN); p->stuNumber=stuNumber; strcpy(p->chass,chass); p->age=age; strcpy(p->telenum,telenum); strcpy(p->name,name); inserStu(L,p); num++; } } return (L); } //*********************保存学生信息******************* void keepStu(Link L) { Link p=L->next; char ch; ofstream outfile("f2.dat",ios::out); if(!outfile) { cerr<<"open f2.dat error"<<endl; exit(1); } while(p!=NULL) { outfile<<"学号:"; outfile<<p->stuNumber; outfile<<" "; outfile<<"年龄:"; outfile<<p->age; outfile<<" "; outfile<<"姓名:"; outfile<<p->name; outfile<<" "; outfile<<"年级:"; outfile<<p->chass; outfile<<" "; outfile<<"电话号码:"; outfile<<p->telenum; outfile<<" "; p=p->next; outfile<<endl; } outfile.close(); cout<<"保存成功!!!!"<<endl; } //*****************读取学生信息********************* Link stuEntry() { char ch; ifstream infile("f2.dat",ios::in); if(!infile) { cerr<<"open f2.dat error"<<endl; exit(1); } while(infile.get(ch)) { cout<<ch; } } //*****************打印学生信息******************** void printList(Link L) { cout<<"*********************学号,姓名,年龄,班级,电话号码**************************"; int n=1; Link p=L; int count(Link L); int temp; temp=count(L);//学生个数: if(temp==0) cout<<"对不起,查无此人";//判断学生管理系统中有无信息 else while(p->next!=NULL) { cout<<"学号:"<<p->next->stuNumber<<"姓名:"<<p->next->name<<"年龄:"<<p->next->age<<"班级:"<<p->next->chass<<"电话号码:"<<p->next->telenum<<endl; p=p->next; n++; } cout<<"***********************************************************************************"; return; } //********************************插入学生信息************************************** void inserStu(Link L,Link Elem) { Link prior(Link L,Link p); Link p=L->next;//*******%%%%**** while(p!=NULL&&Elem->stuNumber>=p->stuNumber) { if(p->stuNumber==Elem->stuNumber) { cout<<"重复输入学号,输入失败!"; return ; } p=p->next; }//确定Elem的插入位置 if(p==NULL) { p=prior(L,p); Elem->next=NULL; p->next=Elem;//若为空表,插入到头结点之后 } else { p=prior(L,p); Elem->next=p->next; p->next=Elem; } } //***********找到当前地址元素的前一元素的地址*********************** Link prior(Link L,Link p) { if(L->next==NULL)return(L); Link p_prior=L; while(p_prior->next!=p) { p_prior= p_prior->next ; } return (p_prior); } //*************************按姓名查询是否存在该学生****************** int searchName(Link L,char n[]) { int flag=0;//标志要查找的学生和学生记录中的姓名是否匹配 Link p=L->next; int seat=1; if(L->next==NULL||L==NULL)printf("没有学生信息\n"); else { while(p!=NULL) { if(!strcmp(p->name,n))//比较要查找的姓名是否和当前学生信息所指的姓名匹配 { flag=1;//输入姓名匹配 printf("要查找的是第%d位学生\n",seat); printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum); } p=p->next ; seat++; } } return flag; } //*********************按学号查找是否存在该学生********************************* int searchNum(Link L,int n) { int flag=0;//标志要查找的学生和管理信息系统中的学号是否匹配 Link p=L->next; int seat=1; if(L->next==NULL)printf("没有学生信息\n"); else { while(p!=NULL) { if(p->stuNumber<=n) { if(p->stuNumber==n)//比较要查找的学号是否和当前学生信息所指的学号匹配 { flag=1;//输入学号匹配 printf("要查找的是第%d位学生\n",seat); printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum); // cout<<"要查找的是第"<<seat<<"位学生"; // cout<<"学号:"<<p->next->stuNumber<<"姓名:"<<p->next->name<<"年龄:"<<p->next->age<<"班级:"<<p->next->chass<<"电话号码:"<<p->next->telenum<<endl; } } p=p->next ; seat++; } } return flag; } //**************************删除学生信息************************ void deleteElem(Link L,int i) { Link p=L; int j=0; while(p->next&&j<i-1) { p= p->next; j++; } if(!(p->next))//判断i时候合法,i不能大于元素的个数,也不能小于等于0 { cout<<"第"<<i<<"个同学删除失败"; return; } Link q=p->next; p->next=q->next; free(q); } //*******************按姓名删除学生信息**************************************************** int deleName(Link L, char n[]) { void deteStu(Link); int flag=0;//判断要删除的学生与系统中的姓名是否匹配 Link p=L->next; int seat =1; if(L->next==NULL) { cout<<"删除提示:系统中没有元素,删除失败!"; deteStu( L); } else { while(p!=NULL) { if(!strcmp(p->name ,n))//比较名字是否匹配 { flag=1; printf("%s",p->name ); p=p->next; deleteElem(L,seat);//删除第i个学生的信息 } else { p=p->next ; seat++; } if(flag) cout<<"已经被删除!!!"<<endl; } } return flag; } //*****************按学号删除学生信息**************************** int deleNum(Link L,int n) { void deteStu(Link); int flag=0; Link p=L->next ; int seat=1; if(L->next==NULL) { cout<<"删除提示:系统中没有元素,删除失败!"; deteStu( L); } else { while(p!=NULL) { if(p->stuNumber==n) { flag=1; printf("%d",p->stuNumber); p=p->next; deleteElem(L,seat); break; } p=p->next ; seat++; } if(flag) { cout<<"被删除了<<endl"; } else { cout<<"没有找到学生信息!!!!"<<endl; } } return flag; } //************************************************************************************* void searchWay1(Link L) { void searchMenu(Link L); int searchWay=0;//控制跳出循环,再次选择查询方式 if(searchWay==0) { cout<<"请输入要查询的学生的学号:"; int n,s; scanf("%d",&n); s=searchNum(L, n); if(s==0) cout<<"查找失败......"<<endl; searchWay=1; } if(searchWay==1) { searchMenu( L); } } //******************************************************************************** void searchWay2(Link L) { void searchMenu(Link L); int searchWay=0;//控制跳出循环,再次选择查询方式 if(searchWay==0) { char n[20]; int flag; cout<<"请输入要查询的学生姓名:"; char temp2=getchar(); gets(n); flag= searchName(L,n); if(flag==0) cout<<"查找失败!!!"<<endl; searchWay=1; } if(searchWay==1) { searchMenu( L); } } //*****************************************************************8 void searchMenu(Link L) { int mainMenu(); cout<<"------------------查询菜单------------------"<<endl; cout<<endl; cout<<" --------1 输入学生学号查询学生信息---------"<<endl; cout<<endl; cout<<" --------2 输入学生姓名查询学生信息---------"<<endl; cout<<endl; cout<<" --------3 返回上级菜单---------------------"<<endl; cout<<endl; cout<<("请选择1-3: "); int menu; cin>>menu; switch(menu) { case 1: { searchWay1(L); break; } case 2: { searchWay2(L); break; } case 3: { break;//跳回主菜单程序 } } } //************************************修改学生信息模块***************************************** void alterStu(Link L)//按学号更新学生信息 { int n; cout<<"请输入要修改的学生学号:"; cin>>n; Link p=L->next; if(p==NULL) { cout<<"学生管理系统没有学生信息!"; } while(p!=NULL)//循环查找学生信息,如果找到该学号则进入循环体更改学生信息 { if(p->stuNumber==n) { int num=1, stuNumber,age; char telenum[50]; char name[20]; char chass[50]; cout<<"请输入学号: "; cin>>stuNumber; cout<<"请输入姓名: "; getchar(); gets(name); cout<<"请输入年龄: "; cin>>age; cout<<"请输入班级: "; getchar(); gets(chass); cout<<"请输入电话号码: "; getchar(); gets(telenum); p->age=age; p->stuNumber=stuNumber; strcpy(p->telenum,telenum); strcpy(p->name,name); strcpy(p->chass,chass); //更新结点 //学生信息更改完成 } p=p->next; } } //****************返回有多少个有效的学生信息*************** int count(Link L)//统计学生信息的数量 { int n=0; Link p=L->next; if(p==NULL) { cout<<"学生信息不存在"<<endl; } while(p!=NULL) { p=p->next; n++; } cout<<"共有"<<n<<"个学生的信息"<<endl; return n; } //********************添加学生信息********************************** void AddStu(Link L) { int temp; temp=count(L); printf("学生数为%d:\n",temp); if(temp==0) { createLink(L); //如果没有学生信息则调用初始化函数 } createLink(L); } //****************删除学生菜单**************************************************** void deteStu(Link L) { int flag=0,way,n; cout<<"------------------查询菜单------------------"<<endl; cout<<endl; cout<<" --------1 通过学生学号删除学生信息---------"<<endl; cout<<endl; cout<<" --------2 通过学生姓名删除学生信息---------"<<endl; cout<<endl; cout<<" --------3 返回上级菜单---------------------"<<endl; cout<<endl; cout<<("请选择1-3: "); cin>>way; if(way<1||way>3) { deteStu(L); } switch (way) { case 1: { cout<<"请输入要删除的学生学号:"; cin>>n; flag= deleNum(L,n); break; } case 2: { char n[20]; cout<<"请输入要删除的学生姓名:"; char temp1=getchar(); gets(n); flag=deleName(L,n); break; } case 3: { break; } } if(flag) { cout<<"删除成功!"<<endl; deteStu(L); } } void welcome() { system("color 74"); cout<<" "<<endl; cout<<" ▇▇▇▇ . ▇▇▇▇ . ▇▇▇▇ ▇▇▇▇ "<<endl; cout<<" ◢▇▇▇▇◣ ◢▇▇▇▇◣ ◢▇▇▇▇◣ ◢▇▇▇▇◣ "<<endl; cout<<" ▇春节快乐▇. ▇生活愉快▇ ▇吉祥如意▇ ▇合家欢乐▇ "<<endl; cout<<" ◥▇▇▇▇◤ .◥▇▇▇▇◤ ◥▇▇▇▇◤ ◥▇▇▇▇◤ "<<endl; cout<<" ▇▇▇▇ . ▇▇▇▇ . ▇▇▇▇ ▇▇▇▇ "<<endl; cout<<" | | | | | | | | | | | | "<<endl; } int mainMenu() { cout<<" *******欢迎使用学生管理信息系统***************"<<endl; cout<<" 1 输入学生信息 "<<endl; cout<<" 2 显示学生信息 "<<endl; cout<<" 3 查询学生信息 "<<endl; cout<<" 4 修改学生信息 "<<endl; cout<<" 5 插入学生信息 "<<endl; cout<<" 6 删除学生信息 "<<endl; cout<<" 7 保存学生信息 "<<endl; cout<<" 8 从文件导入学生信息 "<<endl; cout<<" 9 统计学生信息的数量 "<<endl; cout<<" 0 退出管理信息系统 "<<endl; int menu=0; cout<<"请选择0-9:"; cin>>menu; if(menu<0&&menu>9) { cout<<"输入无效,请正确输入有效序号0-8:"; cin>>menu; } return menu; }
*代码3:main函数
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include <fstream> #include "shixun.h" #define LEN sizeof(LNode) using namespace std; int main() { string name,pass[3]; welcome(); cout<<"请输入管理员名字"; cin>>name; cout<<endl; cout<<"请输入管理员密码"; int i,m,n,status=1; for(i=0;i<3;i++) { cin>>pass[i]; cout<<endl; if(pass[i]=="admin") { cout<<"正在登陆请稍后"<<endl; for(m=0;m<10;m++) { for(n=0;n<100000000;n++) {n++;}; cout<<"●"; }break; } if(i==0||i==1) {cout<<"密码错误请重新输入"; } if(i==2) exit(0); } system("cls"); Link L=(Link)malloc(LEN);//在主函数上首先让结构体指针初始化; L->next=NULL; int flag=0;//学生信息是否建立 int menu=0;//菜单选项 while(1) { menu=mainMenu(); switch(menu)//用于调用子菜单 { case 1:{L=createLink(L);break;} case 2:{printList(L); break;} case 3:{searchMenu(L); break;} case 4:{alterStu(L) ;break;} case 5:{createLink(L);break;} case 6:{deteStu( L); break;} case 7:{keepStu( L); break;} case 8:{L=stuEntry();break;} case 9:{count(L);break;} case 0:{return 0;} } } }
*运行结果:
*实训总结:
数据结构的实训,在今天,算是真正的结束了,但是对于数据结构的学习这才刚刚开始而已,这半个学期,老贺帮了我们很多,但是不知道我们在毕业前是不是还有机会能倾听老贺的课程,说实话,课程改革不是一件容易的事情,既然。贺老师已经全身心投入到翻转式课堂,就希望老师能够好好的做下去,我们无条件支持老贺,改革的过程中
肯定会遇到很多的困难,反正贺老师如果有需要,我们义不容辞,尽管招呼我们就行。
我们是计科的嵌入式专业,其实我总感觉自己的起点就不如那些普通专业的高,但是谁让自己在高考的时候没发挥好,嘿嘿,下学期的选课又要开始了,现在还在纠结到底怎么选呢,java和linux不知道往哪一个方向发展,然后还有四级,也不知道这次能不能过,哎,愁人的事还有一大堆,这个总结,我也没说具体的关于我们数据结构,就是跟老师诉诉苦了,这几天老师验收的也挺累的,老贺辛苦了