您的位置:首页 > 其它

实训-学生信息管理系统

2015-12-25 16:21 267 查看
*******************************
*版权所有 (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不知道往哪一个方向发展,然后还有四级,也不知道这次能不能过,哎,愁人的事还有一大堆,这个总结,我也没说具体的关于我们数据结构,就是跟老师诉诉苦了

,这几天老师验收的也挺累的,老贺辛苦了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: