实训—学生信息管理系统

*******************************  
*版权所有 (c)2016 zhangdong  
*文件名称:123.cpp  
*文件标识:无  
题目描述:学生信息管理系统开发  
*其他说明:无  
*当前版本:V1.0  
*作者:田艺 
*完成时间:2016.12.29  
*学院:计算机与控制工程学院  
******************************* 

架构:


头文件代码:

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();
部分函数实现:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include <fstream>
#include "123.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<<"请输入学生的信息:学号,姓名,年龄,班级,电话号码O(∩_∩)O~";
        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 C");
    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;
}

main函数:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include <fstream>
#include "123.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;}
		 }
	 }
 }

运行结果:




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值