实训-学生信息管理系统

*******************************
*版权所有 (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;}
		 }
	 }
 }
*运行结果:

实训-学生信息管理系统_第1张图片

实训-学生信息管理系统_第2张图片

实训-学生信息管理系统_第3张图片

实训-学生信息管理系统_第4张图片

实训-学生信息管理系统_第5张图片

实训-学生信息管理系统_第6张图片

实训-学生信息管理系统_第7张图片

实训-学生信息管理系统_第8张图片

实训-学生信息管理系统_第9张图片

实训-学生信息管理系统_第10张图片

*实训总结:

    数据结构的实训,在今天,算是真正的结束了,但是对于数据结构的学习这才刚刚开始而已,这半个学期,老贺帮了我们很多,但是不知道我们在毕业前是不是还有机会能倾听老贺的课程,说实话,课程改革不是一件容易的事情,既然。贺老师已经全身心投入到翻转式课堂,就希望老师能够好好的做下去,我们无条件支持老贺大笑,改革的过程中

肯定会遇到很多的困难,反正贺老师如果有需要,我们义不容辞,尽管招呼我们就行。

    我们是计科的嵌入式专业,其实我总感觉自己的起点就不如那些普通专业的高,但是谁让自己在高考的时候没发挥好,嘿嘿,下学期的选课又要开始了,现在还在纠结到底怎么选呢,java和linux不知道往哪一个方向发展,然后还有四级,也不知道这次能不能过,哎,愁人的事还有一大堆,这个总结,我也没说具体的关于我们数据结构,就是跟老师诉诉苦了微笑,这几天老师验收的也挺累的,老贺辛苦了大笑


你可能感兴趣的:(实训-学生信息管理系统)