数据结构课程设计——电子投票系统

/*  
 *Copyright (c) 2016,烟台大学计算机学院  
 *All rights reserved.  
 *文件名称:main.cpp  
 *作者:衣龙川  
 *完成日期:2016年12月29日  
 *版本号:vc++6.0  
 *  
 *问题描述:课程设计 电子投票系统
main.cpp:
#include"head.h"
httype xinxi[17];  
toupiaozhe log[100];  
int renshu=0;  
int dangqian;  
int main()  
{  
    zhizhenchushihua();//将指针数组所有值置为空  
    duqu(xinxi);  
    duqu2(log);//将文件中的信息读入  
    login();//登录  
    zhuhuanying();//欢迎界面  
    cunpan(xinxi);  
    cunpan2(log);//储存信息  
    return 0;  
}

 

xinxihanshu.cpp:

#include"head.h"
extern struct httype xinxi[17];  
extern struct toupiaozhe log[100];  
extern int renshu;  
extern int dangqian;  
/********************************************************* 
* 功能描述: 哈希函数 生成数据存储位置 
* 输入参数: 候选人的序号 
* 输出参数: 无 
* 返回值  : 数值取余运算的结果 
* 其它说明: 无 
************************************************************/  
int h(int n)   //实现哈希函数  
{  
    return n%17;  
}  
/********************************************************* 
* 功能描述: 存储函数 存储候选人的信息到文件 
* 输入参数: l[]-存储指针的数组 
* 输出参数: f1.txt-输出文件名 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void cunpan(httype l[])  
{  
    int i=0;  
    httype a;  
    ofstream outfile("f1.txt",ios::binary);  
    if(!outfile)  
    {  
        exit(1);  
    }  
    i=0;  
    while(i<17)  
    {  
        a=l[i];  
        while(a.link!=NULL)  
        {  
            outfile<<a.link->name<<' '<<a.link->num<<' '<<a.link->zijie<<' '<<a.link->sex<<' '<<a.link->piaoshu;  
            outfile<<"\r\n";  
            a.link=a.link->next;  
        }  

        i++;  
    }  
    outfile.close();  
}  
/********************************************************* 
* 功能描述: 读取函数 读取候选人的信息到文件 
* 输入参数:`无 
* 输出参数: ht[]-指针数组 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void duqu(httype ht[])  
{  
    int i,j;  
    xuanshou *q;  
    ifstream infile("f1.txt",ios::binary);  
    if(!infile)  
    {  
        cout<<"您是第一次使用本系统"<<endl;  
    }  
    else  
    {  
        for(i=0; i<17; i++)  
        {  
            q=new xuanshou;  
            infile>>q->name>>q->num>>q->zijie>>q->sex>>q->piaoshu;  
            q->next=NULL;  
            j=h(q->num);  
            if(ht[j].link==NULL)  
            {  
                ht[j].link=q;  
            }  
            else  
            {  
                q->next=ht[j].link;  
                ht[j].link=q;  
            }  
            infile.get();  

        }  
    }  
    infile.close();  
}  
/********************************************************* 
* 功能描述: 哈希函数-建立哈希表 
* 输入参数:`xs[]-选手信息 
              ht[]-指针数组 
              n-需要储存的个数 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void hash(xuanshou xs[],httype ht[],int n)  
{  
    int i,j; //i是计数器,j是制定存储位置的  
    xuanshou *q;  
    for(i=0; i<n; i++)  
    {  

        q=new xuanshou;  
        q->name=xs[i].name;  
        q->num=xs[i].num;  
        q->zijie=xs[i].zijie;  
        q->sex=xs[i].sex;  
        q->piaoshu=xs[i].piaoshu;  
        q->next=NULL;  
        j=h(xs[i].num);  

        if(ht[j].link==NULL)  
        {  
            ht[j].link=q;  
        }  
        else  
        {  
            q->next=ht[j].link;  
            ht[j].link=q;  
        }  
    }  
    cunpan(xinxi);  
}  

/********************************************************* 
* 功能描述: 输出函数,显示选手信息 
* 输入参数: ht[]-指针数组 
* 输出参数: p->num-选手的序号 
              p->name->选手的名字 
              p->sex->选手的性别 
              p->zijie->选手的自我介绍 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
int DispHT(httype ht[])  
{  
    int i,j=1,k=0;  
    xuanshou *p;  
    for(i=0; i<17; i++)  
    {  
        p=ht[i].link;  
        if(p==NULL)  
            k++;  
        while(p!=NULL)  
        {  
            cout<<j;  
            cout<<" 学号:"<<p->num;  
            cout<<" 姓名:"<<p->name;  
            cout<<" 性别:"<<p->sex;  
            cout<<" 自我介绍:"<<p->zijie;  
            p=p->next;  
            cout<<endl;  
            j++;  
        }  
    }  
    if(k==17)  
    {  
        cout<<"管理员未在此系统中登入信息。"<<endl;  
        return 1;  
    }  
}  
/********************************************************* 
* 功能描述: 初始化-将选手信息录入系统 
* 输入参数:`xs[]-选手信息 
              xinxi[]-指针数组 
              n-需要储存的个数 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void chushihua()  
{  
    int n,cuowu;//n人数  
    int yanzheng;  
    int i=0;  
    xuanshou xs[100];  
    httype a;  
    cout<<"请输入您想录入的人数"<<endl;  
    cin>>n;  
    while(i<n)  
    {  
        cout<<"学号"<<endl;  
        cin>>xs[i].num;  
        yanzheng=h(xs[i].num);  
        a.link=xinxi[yanzheng].link;  
        while(a.link!=NULL)  
        {  
            if(a.link->num==xs[i].num)  
            {  
                cout<<"您输入的选手已录入系统"<<endl;  
                cout<<"如果想更改选手的信息请按1,重新初始化请按0"<<endl;  
               cin>>cuowu;  
                if(cuowu==1)  
                {  
                    genggai();  
                }  
                else if(cuowu==0)  
                {  
                    chushihua();  
                    root(1);  
                }  
            }  
            a.link=a.link->next;  
        }  
        cout<<"请输入姓名";  
        cin>>xs[i].name;  

        cout<<"请输入性别"<<endl;  
        cin>>xs[i].sex;  

        cout<<"请输入自我介绍"<<endl;  
        cin>>xs[i].zijie;  
        i++;  
    }  
   hash(xs,xinxi,n);  
}  
/********************************************************* 
* 功能描述: 查看选手信息 
* 输入参数:`xinxi[]-指针数组 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void chakanxinxi() //查看选手信息  
{  
    DispHT(xinxi);  
}  
/********************************************************* 
* 功能描述: 给选手投票 
* 输入参数:`n-选手序号 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void toupiao() //投票  
{  
   int n,m;  
    httype a;  
    int k=DispHT(xinxi);  
   if(k==1)  
    {  

   }  
    else  
    {  
        if(log[dangqian].cishu!=0)  
       {  
            cout<<"按照学生的学号进行投票"<<endl;  
            cin>>n;  
            m=h(n);  
            a=xinxi[m];  
            while(a.link!=NULL)  
           {  
                if(a.link->num==n)  
               {  
                    a.link->piaoshu++;  
                    log[dangqian].cishu=0;  
                    break;  
                }  
                else  
                    a.link=a.link->next;  
            }  
        }  
        else  
        {  
           cout<<"您的投票次数已经用完!"<<endl;  
      }  
        cunpan(xinxi);  
    }  
}  
/********************************************************* 
* 功能描述: 管理员函数 
* 输入参数:`n-选手序号 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void root(int a) //管理员  
{  
    int xuanxiang;  
    if(a==0)  
        rootmima();  
   Sleep(1000);  
    system("cls");  
    system("Color 0C");  
    while(1)  
   {  
        cout<<"请输入选项:"<<endl;  
        cout<<"请输入您想使用的功能:"<<endl;  
        cout<<"╰★【1】初始化选手信息"<<endl;  
        cout<<"╰★【2】浏览候选人简介"<<endl;  
        cout<<"╰★【3】修改候选人简介"<<endl;  
        cout<<"╰★【4】查看当前投票情况"<<endl;  
        cout<<"╰★【5】清除所有信息"<<endl;  
        cout<<"╰★【6】返回上一层"<<endl;  
        cout<<"请输入您的选择:";  
        cin>>xuanxiang;  
        switch(xuanxiang)  
        {  

        case 1:  
            chushihua();  
           break;  
        case 2:  
            chakanxinxi();  
            break;  
        case 3:  
            genggai();  
            break;  
        case 4:  
            qingkuang(xinxi);  
            break;  
        case 5:  
            qingchu();  
            break;  
        case 6:  
            fanhui();  
            break;  
       

       }  
    }  
}  
/********************************************************* 
* 功能描述: 管理员密码管理 
* 输入参数:`mima-用户输入的密码 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void rootmima()  
{  
    string mima;  
    int i=3;  
    cout<<"请输入密码:";  
   while(i>=0)  
   {  
        cin>>mima;  
       if(mima=="admin")  
       {  
           cout<<"密码正确,正在跳转,请稍后";  
            break;  
        }  
        else  
        {  
            cout<<"密码输入错误,您还有"<<i<<"次机会(如果错误三次将会冻结)";  
            i--;  
        }  
   }  
}  
/********************************************************* 
* 功能描述: 管理员更改选手信息 
* 输入参数:`xuhao-选手的序号 
              n-更改的项目序号 
              na-临时变量可代表名字,性别,自我介绍。 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void genggai()  
{  
    int xuhao; //选择序号  
    DispHT(xinxi);  
    cout<<"请输入需要更改的选手的学号:";  
    cin>>xuhao;  
   int n,m,p;  //m为哈希表临时变量,n为更改选项  
    httype a;  //指针数组临时变量  
    string na;  //字符串临时变量  
    m=h(xuhao);  
    a=xinxi[m];  
    while(a.link!=NULL)  
    {  
        if(a.link->num==xuhao)  
        {  
            break;  
        }  
        else  
            a.link=a.link->next;  
    }  


    cout<<"╰★【1】请输入新的姓名"<<endl;  
    cout<<"╰★【2】请输入新的性别"<<endl;  
    cout<<"╰★【3】请输入新的自我介绍"<<endl;  
    cout<<"请输入需要更改的项目:";  
    cin>>n;  
    switch(n)  
    {  
    case 1:  
    {  
        cout<<"请输入新的名字:";  
        cin>>na;  
        a.link->name=na;  
    }  
    break;  
    case 2:  
{  
        cout<<"请输入新的性别:";  
        cin>>na;  
        a.link->sex=na;  
    }  
    break;  

    case 3:  
    {  
        cout<<"请输入新的自我介绍:";  
        cin>>na;  
        cout<<"如果想全部修改请按1,插入到后边请按2.";  
       cin>>p;  
        if(p==1)  
            a.link->zijie=na;  
       else if(p==2)  
        {  
            a.link->zijie=a.link->zijie+na;  
        }  

    }  
    break;  
    }  
}  
/********************************************************* 
* 功能描述: 管理员清除选手信息 
* 输入参数:`无 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 删除系统中储存文件,释放内存中的空间。 
************************************************************/  
void qingchu()  
{  

    int i,j=1;  
   xuanshou *p=NULL;  
    xuanshou *q=NULL;  

    for(i=0; i<17; i++)  
    {  

        p=xinxi[i].link;  
        if(p!=NULL)  
        {  
            q=p;  
            p=p->next;  
        }  
        while(p!=NULL)  
        {  
            delete q;  
            q=p;  
            p=p->next;  


        }  
        if(p==NULL&&q!=NULL)  
        {  
            delete q;  
            q=NULL;  
        }  
    }  
    DeleteFile("f1.dat");  
    zhizhenchushihua();  
}  
/********************************************************* 
* 功能描述: 管理员清楚选手信息 
* 输入参数:`无 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 将指针数组置为NULL。 
************************************************************/  
void zhizhenchushihua()  
{  
    int i;  
    for(i=0; i<17; i++)  
    {  
        xinxi[i].link=NULL;  
    }  
}  
/********************************************************* 
* 功能描述: 管理员查看选手票数排名 
* 输入参数:`k- 1全部输出(排序) 
               - 2指定输出 
              ht-指针数组 
* 输出参数: p->num-选手的序号 
             p->name->选手的名字 
              p->sex->选手的性别 
              p->zijie->选手的自我介绍 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void qingkuang(httype *ht)  
{  

    int i,j=0,k;//k为选择全部输出还是单个输出  
    xuanshou *p;  
    xuanshou a[100];  
    for(i=0; i<17; i++)  
    {  
        p=ht[i].link;  
        while(p!=NULL)  
        {  
            a[j].num=p->num;  
            a[j].name=p->name;  
            a[j].sex=p->sex;  
            a[j].zijie=p->zijie;  
            a[j].piaoshu=p->piaoshu;  
            p=p->next;  
           j++;  
        }  

    }  
    xierpaixu(a,j);  
    i=j-1;  
    cout<<"查看所有选手的排名请按1,查看某位选手的排名及票数请按2."<<endl;  
    cin>>k;  
    if(k==1)  
   {  
        while(i>=0)  
        {  
            cout<<"学号:"<<a[i].num<<endl;  
           cout<<endl;  
            cout<<"姓名:"<<a[i].name<<endl;  
           cout<<endl;  
           cout<<"性别:"<<a[i].sex<<endl;  
            cout<<endl;  
            cout<<"票数:"<<a[i].piaoshu<<endl;  

            i--;  
        }  
    }  
    else if(k==2)  
    {  
        cout<<"请输入选手的学号"<<endl;  
        cin>>k;  
        int t=h(k);  
        httype a;  
       a=xinxi[t];  
        while(a.link!=NULL)  
        {  
            if(a.link->num==k)  
            {  
               cout<<"学号:"<<a.link->num<<endl;  
                cout<<"姓名:"<<a.link->name<<endl;  
                cout<<"性别:"<<a.link->sex<<endl;  
                cout<<"票数:"<<a.link->piaoshu<<endl;  
                break;  

           }  
           else  
            {  
                a.link=a.link->next;  
            }  

        }  

    }  
}  
/********************************************************* 
* 功能描述: 排序 希尔排序 
* 输入参数:`R[] -选手信息 
              n - 选手个数 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 将链表中的数据读入数组进行排序 
************************************************************/  
void xierpaixu(xuanshou R[],int n)   //希尔排序  
{  
    int i,j,gap;  
    xuanshou tmp;  
    gap=n/2;                //增量置初值  
    while (gap>0)  
    {  
        for (i=gap; i<n; i++) //对所有相隔gap位置的所有元素组进行排序  
        {  
           tmp=R[i];  
            j=i-gap;  
            while (j>=0 && tmp.piaoshu<R[j].piaoshu)//对相隔gap位置的元素组进行排序  
            {  
                R[j+gap]=R[j];  
                j=j-gap;  
            }  
            R[j+gap]=tmp;  
            j=j-gap;  
        }  
       gap=gap/2;  //减小增量  
    }  
}  
/********************************************************* 
* 功能描述: 从root界面返回一般界面 
* 输入参数:`无 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 清屏并调用欢迎界面 
************************************************************/  
void fanhui()  
{  
    system("cls");  
    zhuhuanying();  

}  
/********************************************************* 
* 功能描述: 用户欢迎界面 
* 输入参数:`xuanze- 用户的功能输入选择 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 输出功能选项并执行相应的功能 
************************************************************/  
void zhuhuanying()  
{  
    int xuanze;//选项号  
    system("cls");  
    system("color 1A"); 
    while(1)  
    {  
        system("color 1A");  //1=蓝色 A=淡绿色
        cout<<""<<log[dangqian].name<<"同学欢迎使用电子投票系统!"<<endl;  
        cout<<"********************************************************************************"<<endl;  
        cout<<"               请输入您想使用的功能:"<<endl;  
        cout<<"               ╰★【1】查看候选人的介绍。 "<<endl;  
        cout<<"               ╰★【2】投票。"<<endl;  
        cout<<"               ╰★【6】注销当前用户"<<endl;  
        cout<<"               ╰★【8】管理员选项(非管理员勿动!)"<<endl;  
        cout<<"               ╰★【0】退出。"<<endl;  
        cout<<"********************************************************************************"<<endl;  
        cout<<"               请输入您的选择:";  
        cin>>xuanze;  


        if(xuanze==0)  
        {  
            cunpan(xinxi);  
            cunpan2(log);  
           exit(1);  
        }  
        switch(xuanze)  
        {  

        case 1:  
            chakanxinxi();  
            break;  
        case 2:  
            toupiao();  
            break;  
       case 6:  
            zhuxiao();  
            break;  
        case 8:  
            root(0);  
            break;  
        }  
    }  
}  
/********************************************************* 
* 功能描述: 用户登录界面 
* 输入参数:`a -用户名 
              t -密码 
              k -选项 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 输出功能选项并执行相应的功能 
************************************************************/  
void login()  
{  
    string a; //用户名  
    int t; //密码  
    int k;//临时变量  
    int i=0;//计数器  
	system("Color 0F");  //0=黑色背景 F=亮白色字体   (自加)
   printf("     ╔━━═━━━═━━━═━━═━━═━━═━═━━═━━═━━━═╗\n"); 
    cout<<"       |             \1\1\1\1  欢迎使用电子投票系统! \1\1\1\1                |"<<endl;  
    cout<<"       |                                                              |"<<endl;  
    cout<<"       |             \1\1\1\1     ╰★【1】登陆       \1\1\1\1                |"<<endl; 
	cout<<"       |             \1\1\1\1     ╰★【8】注册       \1\1\1\1                |"<<endl;
    cout<<"       |                                                              |"<<endl;  
   printf("     ╚━━═━━━═━━━═━━━═━━━═━━━═━━═━━═━━━╝\n");
    cout<<"           请输入您的选择:     ";  
    cin>>k;  
    if(k==1)  
    {  
        while(1)  
        {  
            cout<<"           请输入您的用户名:";  
            cin>>a;  
           if(a=="admin")  //若密码正确直接进入管理员系统(自加)
            {  
               rootmima();  
                root(1);  
            }  
           cout<<"           请输入密码:";  
            cin>>t;  
           while(i<100)  
           {  
                if(log[i].name==a)  
                {  
                   break;  
               }  
               i++;  
            }  
           dangqian=i;  
            if(i==100)  
            {  
                cout<<"           用户名不存在"<<endl;  
                i=0;  
            }  
            else if(i<=100&&log[i].mima!=t)  
               cout<<"           密码错误"<<endl;  
            else break;  
        }  
    }  
    else if(k==8)  
    {  
        zhuce();    
   }  
   system("cls");  
    if(log[dangqian].quanxian==1)  
    {  
        root(1);  
    }  
}  
/********************************************************* 
* 功能描述: 用户注册界面 
* 输入参数:`log[renshu].name -用户名 
              i -重复密码 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void zhuce()  
{  
    int i;  
    cout<<"请输入您的姓名:"<<endl;  
    cin>>log[renshu].name;  
    cout<<"请输入您的学号:"<<endl;  
       cin>>log[renshu].num;  
       while(1)  
    {  
        cout<<"请输入您的密码:"<<endl;  
        cin>>log[renshu].mima;  
        cout<<"请再输入您的密码:"<<endl;  
        cin>>i;  
        if(i==log[renshu].mima)  
        {  
            cout<<"注册成功!正在跳转。"<<endl;  
            cout<<log[renshu].cishu<<' '<<log[renshu].quanxian;  
            Sleep(1000);  
            dangqian=renshu;  
            renshu++;  
            break;  
        }  
        else  
           cout<<"两次密码不一致,请重新输入"<<endl;  
    }  
    cunpan2(log);  
}  
/********************************************************* 
* 功能描述: 读取投票者信息 
* 输入参数:`无 
* 输出参数: log[]-用户信息 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void duqu2(toupiaozhe log[])  
{  
    int i;  
    ifstream in1("f2.txt",ios::binary);  //ifstream 输入文件流,用于从文件读数据(从文件读入)(自加)
    if(!in1)  
    {  
        cout<<"该系统中还未有用户注册"<<endl;  
    }  
    else  
    {  
        i=0;  
        while(in1.peek()!= EOF)  
        {  
            in1>>log[i].name>>log[i].mima>>log[i].cishu>>log[i].quanxian>>log[i].num;  
            i++;  
            in1.get();  
        }  
        renshu=i-1;  
        in1.close();  
    }  
}  
/********************************************************* 
* 功能描述: 存储投票者信息 
* 输入参数:`log[]-用户信息 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 无 
************************************************************/  
void cunpan2(toupiaozhe log[])  
{  
    int i;  
    ofstream out1("f2.txt",ios::binary);  //ofstream 输出文件流,用于向文件写数据(输出到文件)(自加)
	                                      //binary说明指定文件打开方式为二进制,即换行符为单字符\n(自加) 
    if(!out1)  
    {  
        exit(1);  
    }  
    i=0;  
    while(i<renshu)  
    {  
        out1<<log[i].name<<' '<<log[i].mima<<' '<<log[i].cishu<<' '<<log[i].quanxian<<' '<<log[i].num;  
        out1<<"\r\n";  
        i++;  
    }  
    out1.close();  
} 




 
/********************************************************* 
* 功能描述: 用户注销 
* 输入参数:`无 
* 输出参数: 无 
* 返回值  : 无 
* 其它说明: 用户通过该模块可以登录别的账号 
************************************************************/  
void zhuxiao()  
{  
    cout<<"你确定要注销?(y/n)";  
    char n;  
    cin>>n;  
    if(n=='y')  
    {  
        system("Color 0A");  //0=黑色背景 A=淡绿色字体
        system("cls");  
        login();  
    }  
    else  
    {  
        system("cls");  
        zhuhuanying();  
    }  
}  


head.h:

#include<stdio.h>
#include<string.h>
#include<string>
#include<malloc.h>
#include<fstream>//文件流。找不到文件时不建立空文件。用while()判断
#include<iostream>
#include<windows.h>//定义了windows的所有资料形态,函数调用,资料结构和常数识别字
using namespace std;  
struct xuanshou  
{  
    string name;//姓名  
    int num;//序号  
    string zijie; //自我介绍  
    string sex; //性别  
    int piaoshu;//票数  
    xuanshou()  
    {  
       piaoshu=0;  
    }  
    struct xuanshou *next; //指向下一个人的指针  
};  
struct httype  
{  
    xuanshou *link;   //指向第一个人的指针  
};  
struct toupiaozhe  
{  
    string name;  
    int num;  
    int mima;  
    int quanxian;//0为最低权限,2为最高  
   int cishu;//投票次数1  
   toupiaozhe()  
    {  
        quanxian=0;  
        cishu=1;  
    }  

};  
int h(int n);   //实现哈希函数  
int DispHT(httype ht[]);//输出哈希表  
void cunpan(httype l[]);//存盘  
void duqu(httype ht[]); //读取  
void hash(string s[],int a[],httype ht[]); //创建哈希表  
void chakanxinxi(); //查看选手信息  
void toupiao(); //投票  
void root(int a); //管理员  
void genggai();//更改选手信息  
void rootmima();//root用户的密码验证  
void qingkuang(httype *ht);  
void qingchu();//清除信息  
void zhizhenchushihua();//ht中的指针置为NULL  
void xierpaixu(xuanshou R[],int n) ;//希尔排序  
void fanhui();//返回程序上一层  
void zhuhuanying();//欢迎界面  
void login();//登录界面  
void zhuce();//注册用户  
void cunpan2(toupiaozhe log[]);//将用户信息存盘  
void duqu2(toupiaozhe l[]);//将用户信息读取  
void zhuxiao();//注销  
void genggai2();//更改用户信息  


 

运行结果:


 


                
1、引言 1.1编写目的 在完成了针对《学生信息系统》软件市场的前期调查,同时与多位同学进行了全面深入地探讨和分析的基础上,提出了这份软件需求规格说明书。 此需求规格说明书对《学生信息系统》软件做了全面细致的用户需求分析,明确所要开发的软件应具有的功能、性能与界面,使系统分析人员及软件开发人员能清楚地了解用户的需求,并在此基础上进一步提出概要设计说明书和完成后续设计与开发工作。 1.2项目背景 由于文件多,种类多,文件创建者多,创建时间为不定期,要保护好一些公司重要的文件极为不便,同时由于人员的流动,对原有的文件的再现,显得力不从心,有时查找与重新整理文件要浪费许多的人力、物力。 为了有效的共享文件资源,保护好文件,及促进学生信息系统管理的信息化、规范化和集成化,本人多方听取意见、追加和完善大量实用功能,进而了解文件管理的流程,同时结合各部门、各专业与学科管理的方法,开发出一套适合于学生信息系统多而复杂的管理系统。 1.3定义、缩写词和符号 需求:用户解决问题或达到目标所需的条件或功能;系统系统部件要满足标准,规范或其它正式规定文档所需具有的条件或权能。 1.4参考资料 张海藩:《软件工程导论》,清华大学出版社,2008年2月版 黄德才: 《数据原理及其应用教程》,科学出版社,2006年2月版 2.任务概述 2.1目标 2.1.1开发目标 在当今世界电脑普及的时刻,人们已经习惯用电脑办公,结果自然会产生大量的电子文件,这些文件有宝贵的历史价值,但我们如果将更多的时间花费在寻找这些文件上,即费时又费力。本软件根据此需求进行开发的。 2.1.2应用目标 让学校能够有效的掌握,有效的共享文件资源,保护好文件,及促进学生信息系统管理的信息化、规范化和集成化,实现计算机的智能化管理,以提高工作效率和经济效益。 2.2运行环境 2.2.1硬件环境 A. 一台.NET系统的微机 B.内存足够大 2.2.2软件环境 A.windows 98 以上的操作系统 B.Microsoft Visual studio 2007 C.Microsoft SqlServer 2000 2.3条件与限制 此学生信息系统管理软件是应用于各个学校的。在功能上还可进一步实现安全防范、与E-Mail和因特网电话集成起来,成为学生信息系统管理软件。 3. 数据描述 3.1静态数据 1)Students表 2)Reports表 3)Courses表 4)Log on表 3.2动态数据 输入数据:菜单选项,添加项,查询项,修改项,删除项。 输出数据:由添加、查询、修改、删除所确定的数据记录集合。 内部生成的数据:查询结果。 3.3数据描述 本软件采用SQL数据。 3.4数据流程图 《学生信息系统》软件的数据流程图是比较清晰的,对各功能模块来说都比较有规律。但完整的图比较繁琐,各个功能模块的基本流程图如下。 3.5数据字典 这里给出一个数据元素的字典卡片与具体数据卡片的含义: 名称:学生信息系统 描述:产生学生信息文件送交学生信息目录表 定义:学生信息系统=学生信息类型+安全级别 4. 功能要求 4.1功能划分 本系统有以下功能模块: 1)学生信息录入模块 2)学生信息查询模块 3)学生信息修改模块 4)学生信息删除模块  4.2功能描述 下面详细描述一下各个功能模块: 1)学生信息录入 (1) 学生信息目录管理:只限于一般用户和管理员操作。而且不同的用户级别所操作的信息类型是有限制的。用户可以向里面添加、修改和删除档案类型。也可设置信息类型的级别,以加强它们的保密性。 (2) 学生信息仓:限于全体操作员工。一般浏览者只能查看学生信息,不能对学生信息做任何的修改。而且不同的用户级别所看到的档案是有限制的。一般用户可向里面添加、修改和删除档案。也可设置学生信息级别,以加强它们的保密性。 2)学生信息查询 (1) 查询单条学生信息记录:主要是适合于全体操作人员的。在窗体上,先可以选择查询的条件,再输入关键字名。按查询即可。查到记录后,也可双击记录即可显示详细信息。 (2) 查询全部学生信息:是给管理员用的,是为了方便管理员查找学生信息,也有按班级查询、按姓名查询和按学号查询。查到记录后,也可双击记录即可显示详细信息。 也有多种查询方法。查到记录后,也可双击记录即可显示详细信息。 3)学生信息修改 (1)修改单条学生信息:主要是适合于全体操作人员的。在窗体上,修改学生信息。修改记录后,也可双击记录即可显示详细信息。 (2)修改全部学生信息:是给管理员用的,是为了方便管理员修改学生信息。修改记录后,也可双击记录即可显示详细信息。 4)学生信息删除 (1)删除单条学生信息:主要是适合于全体操作人员的。在窗体上,删除学生信息。删除记录后,也可双击记录即可显示详细信息。 (2)删除全部学生信息:是给管理员用的,是为了方便管理员删除学生信息。删除记录后,也可双击记录即可显示详细信息。 5.性能需求 5.1数据精确度 A.要按照严格的数据格式输入,否则系统不给予响应进行处理。 B.查询时要保证查全率,所有相应域包含查询关键字的记录都应能查到。因为通常有文件的记录会很多,所以本系统采用了两种方法进行查询:按班级查询、按姓名查询和按学号查询。 5.2时间特性 一般操作的响应时间应在1~2秒内,对软磁盘和打印机的操作也应在可接受的时间内完成。 5.3适应性 满足学校使用的需求(记录量控制在1000项内)。 对前面提到的运行环境要求不应存在困难。 6. 运行需求 6.1用户界面 超越VB的界面,全新感觉,操作简便,一目了然,视图优美等特点。并且采用菜单界面驱动方式,给操作用户带来了极大的便利,对用户友好。对鼠标和键盘单独支持。 6.2硬件接口 本软件不需要特定的硬件或硬件接口进行支撑。 6.3软件接口 运行于Windows 2000及更高版本具有.net的操作系统之上。 6.4故障处理 正常使用时不应出错,若运行时遇到不可恢复的系统错误,也必须保证数据完好无损。 调试中遇到的问题及解决的方案: 1)遇到跳出“数据已经关闭“提示信息阻止程序运行时 可以查看一下进行此项操作时,操作的表是否已经被关闭了或者是在没有关闭此表的情况 下又一次运用打开语句打开此表。 2)关于空记录带来的麻烦 有些空记录往往会使程序无法运行。此时你可用“if not isnull”语句先判断一下是否为 空记录,再操作。 3)有些运行错误也可用如下语句排除 On Error GoTo Erropoint Erropoint : Msgbox Err.Descripton Exit sub 或用On Error resume Next 等语句进行处理。 7.其它要求 1)系统的功能实现情况: 用户可在本系统实现各种用户要求的功能 2)系统的安全性: 对于系统的重要数据都有密码保护,具有一定的安全性 3)系统的容错性: 用户输错数据都有提示信息,具有较好的容错性能。 4)系统的封闭性: 用户的封闭性较好,用户基本上在提示信息下输数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值