用链表做一个学生管理系统

//Student.cpp

#include<iostream>

 

using namespace std;

 

struct Stu

{

    char no[10];

    char name[16];

    int math;

    int chi;

    double ave;

};

 

class Student

{

public:

    Stu st;

    Student * next;

public:

    Student(){}

    Student(Stu s)

    {

        st=s;

        next=NULL;

        st.ave=(st.math+st.chi)/2.0;

    }

    void setst(Stu s)

    {

        st=s;

        st.ave=(st.math+st.chi)/2.0;

    }

    Stu getst()

    {

        return st;

    }

    void show()

    {

        cout<<"----------------------------"<<endl;

        cout<<"学号:"<<st.no<<endl;

        cout<<"姓名:"<<st.name<<endl;

        cout<<"数学成绩:"<<st.math<<endl;

        cout<<"语文成绩:"<<st.chi<<endl;

        cout<<"平均成绩:"<<st.ave<<endl;

        cout<<"----------------------------"<<endl;

    }

};

 

 

 

 

//main.cpp

#include<fstream>

#include"Student.cpp"

 

using namespace std;

 

Student * create_List();

void traverse_List(Student * pHead);

bool is_empty(Student * pHead);

int length_List(Student * pHead);

bool insert_List(Student * pHead,int position,Stu st);

bool delete_List(Student * pHead,int position,Stu * st);

void sort_List(Student * pHead); 

void menu_select();

void handle_menu(int s);

void outFile();

Student * inFile();

void delFile();

 

Student * pHead;

 

 

void main()

{

    menu_select();

}

 

void menu_select()

{

    int s;

    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<<endl;

    cout<<"左边数字对应功能选择,请选择1-9:";

    cin>>s;

    handle_menu(s);

}

 

void handle_menu(int s)

{

    switch (s)

    {

    case 1:

        {

           system("cls");

           pHead=create_List();

           system("cls");

           menu_select();

           break;

        }

    case 2:

        {

           if(NULL==pHead)

           {

               cout<<"记录总条数为零"<<endl;

               getchar();

               getchar();

               system("cls");

               menu_select();

           }

           system("cls");

           sort_List(pHead);

           traverse_List(pHead);

           getchar();

           getchar();

           system("cls");

           menu_select();

           break;

        }

    case 3:

        {

           if(pHead!=NULL)

           {

               system("cls");

               outFile();

               system("cls");

               menu_select();

           }

           system("cls");

           menu_select();

           break;

        }

    case 4:

        {

           system("cls");

           pHead=inFile();

           system("cls");

           menu_select();

           break;

        }

    case 5:

        {

           system("cls");

           delFile();

           system("cls");

           menu_select();

           break;

        }

    case 6:

        {

           if(NULL==pHead)

           {

               cout<<"记录总条数为零"<<endl;

               getchar();

               getchar();

               system("cls");

               menu_select();

           }

           system("cls");

           int num;

           Stu st;

           traverse_List(pHead);

           cout<<"您想在哪条记录后插入,请输入序号:";

           cin>>num;

           cout<<"编辑要插入的记录:"<<endl;

           cout<<"学号:";

           cin>>st.no;

           cout<<"姓名:";

           cin>>st.name;

           cout<<"数学成绩:";

           cin>>st.math;

           cout<<"语文成绩:";

           cin>>st.chi;

           if(insert_List(pHead,num-1,st))

           {

               cout<<"插入成功!"<<endl;

           }

           else

           {

               cout<<"插入失败!"<<endl;

           }

           getchar();

           getchar();

           system("cls");

           menu_select();

           break;

        }

    case 7:

        {

           if(NULL==pHead)

           {

               cout<<"记录总条数为零"<<endl;

               getchar();

               getchar();

               system("cls");

               menu_select();

           }

           int num;

           Stu * st=(Stu *)malloc(sizeof(Stu));

           traverse_List(pHead);

           cout<<endl<<"请输入您要删除的记录的序号:";

           cin>>num;

           if(delete_List(pHead,num,st))

           {

               cout<<endl<<"成功删除的记录如下:"<<endl;

               cout<<"学号:"<<st->no<<endl<<"姓名:"<<st->name<<endl;

           }

           else

           {

               cout<<"删除失败!"<<endl;

           }

           getchar();

           getchar();

           system("cls");

           menu_select();

           break;

        }

    case 8:

        {

           if(NULL!=pHead)

           {

               system("cls");

               cout<<"记录总条数:"<<length_List(pHead)<<"条"<<endl;

               getchar();

               getchar();

               system("cls");

               menu_select();

           }

           else

           {

               cout<<"记录总条数为零"<<endl;

               getchar();

               getchar();

               system("cls");

               menu_select();

           }

           break;

        }

    case 9:

        {

           system("cls");

           cout<<"成功退出!"<<endl;

           exit(0);

           break;

        }

    }

}

 

 

void delFile()

{

    ofstream fileout;

    fileout.open("c:\\kcsj.txt",ios_base::out);

    fileout<<"";

    fileout.close();

}

 

 

Student * inFile()

{

    Student * pHead=(Student *)malloc(sizeof(Student));

    if(NULL==pHead)

    {

        cout<<"分配失败,程序终止!"<<endl;

        exit(0);

    }

    Student * pTail=pHead;

    pTail->next=NULL;

    ifstream in("c:\\kcsj.txt");

    if (!in.is_open())

    {

        cout << "Error opening file"<<endl; 

        exit(0);

    }

    while (!in.eof())

    {

        Stu st;

        in.read(reinterpret_cast<char *>(&st), sizeof(st));

        if (in.fail()) 

        {

           break;

        }

        Student * pNew=new Student();

        if(NULL==pNew)

        {

           printf("分配失败,程序终止\n");

           exit(0);

        }

        pNew->setst(st);

        pTail->next=pNew;

        pNew->next=NULL;

        pTail=pNew;

    }

    in.close();

    return pHead;

}

 

 

void outFile()

{

    ofstream out;

   out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);

    if(!out)

    {

        cout<<"文件不存在,退出时别忘记保存文件!"<<endl;

        out.close();

        out.open("stu.dat",ios_base::out|ios::binary);

    }

    else

    {  

        out.close();

       out.open("c:\\kcsj.txt",ios_base::out|ios_base::app|ios::binary);

    }

    Student * temp=pHead->next;

    while(temp!=NULL)

    {

        Stu st=temp->getst();

        out.write(reinterpret_cast<char *>(&st), sizeof(st));

        temp=temp->next;

    }   

    out.close();

}

 

Student * create_List()

{

    int len;

    Student * pHead=(Student *)malloc(sizeof(Student));

    if(NULL==pHead)

    {

        cout<<"分配失败,程序终止!"<<endl;

        exit(0);

    }

    Student * pTail=pHead;

    pTail->next=NULL;

    cout<<"请输入要存储的学生人数:";

    cin>>len;

    for(int i=0;i<len;i++)

    {

        Stu st;

        cout<<"请输入第"<<i+1<<"个学生的学号:";

        cin>>st.no;

        cout<<"请输入第"<<i+1<<"个学生的姓名:";

        cin>>st.name;

        cout<<"请输入第"<<i+1<<"个学生的数学成绩:";

        cin>>st.math;

        cout<<"请输入第"<<i+1<<"个学生的语文成绩:";

        cin>>st.chi;

        Student * pNew=new Student();

        if(NULL==pNew)

        {

           printf("分配失败,程序终止\n");

           exit(0);

        }

        pNew->setst(st);

        pTail->next=pNew;

        pNew->next=NULL;

        pTail=pNew;

    }

    return pHead;

}

 

void traverse_List(Student * pHead)

{

    int i=1;

    Student * temp=pHead->next;

    while(temp!=NULL)

    {

        cout<<endl<<"序号:"<<i<<endl;

        temp->show();

        temp=temp->next;

        i++;

    }

}   

 

bool is_empty(Student * pHead)

{

    if(NULL==pHead->next)

    {

        return true;

    }

    else

    {

        return false;

    }

}

 

int length_List(Student * pHead)

{

    int len=0;

    Student * temp=pHead->next;

    while(temp)

    {

        len++;

        temp=temp->next;

    }

    return len;

}

 

bool insert_List(Student * pHead,int position,Stu st)

{

    int i=0;

    Student * p=pHead;

 

    while(NULL!=p&&i<position-1)

    {

        p=p->next;

        i++;

    }

    if(i>position-i||NULL==p)

    {

        return false;

    }

    Student * pNew=(Student *)malloc(sizeof(Student));

    if(NULL==pNew)

    {

        cout<<"分配失败,程序终止"<<endl;

        exit(0);

    }

    pNew->setst(st);

    pNew->next=p->next;

    p->next=pNew;

    return true;

}

 

bool delete_List(Student * pHead,int position,Stu * st)

{

    int i=0;

    Student * p=pHead;

 

    while(NULL!=p->next&&i<position-1)

    {

        p=p->next;

        i++;

    }

    Student * q=p->next;

    *st=q->getst();

    p->next=p->next->next;

    free(q);

    q=NULL;

    return true;

}

 

void sort_List(Student * pHead)

{

    Student * p,* q;

    Stu temp;

    int i,j;

    int len=length_List(pHead);

    for(i=0,p=pHead->next;i<len-1;i++,p=p->next)

    {

        for(j=i+1,q=p->next;j<len;j++,q=q->next)

        {

           if(q->st.ave>p->st.ave)

           {

               temp=q->st;

               q->st=p->st;

               p->st=temp;

           }

        }

    }   

}

时间: 2024-10-24 02:34:16

用链表做一个学生管理系统的相关文章

用链表写的学生管理系统 成绩的录入与查询都已经是实现了

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct teacher { char name[32]; int math; int english; int data; struct Node *next; }SLIST; int Creat_SList(); int SList_Print(); int SLis

准备用C51做个学生管理系统(2)

能够控制矩阵键盘以后,我就直接改代码控制8X8的键盘,用P1和P3口 1 void keyscan() 2 { 3 uchar tmp; 4 P1 = 0xff; 5 P3 = 0x00; 6 delay(5); 7 tmp = P1^0xff; 8 9 //blink(); 10 //delay(500); 11 12 switch(tmp){ 13 case 1: 14 now_num = 0; 15 break; 16 case 2: 17 now_num = 1; 18 break; 1

准备用C51做个学生管理系统(1)

为了做这个看起来很容易,做起来很麻烦的基于51的学生管理系统,我得准备很多的知识,首先是51单片机的一些IO.定时器差不多就可以了,硬件方面还要有数码管.LCD1602.矩阵键盘等知识,至于代码就需要数据结构双向链表的知识就差不多了,用到的软件无非也就是protues.keil.protel这三剑客了. 1.为什么要用到数码管呢,因为很少做这些硬件的东西,用数码管主要是为了验证我的矩阵键盘功能有没有用罢了,数码管的abcdefg对应那几根“杠杠”的亮否可以直接显示亮的数据,因为矩阵键盘是8X8的

三天教会大家做一个社保管理系统中的核销小工具

我想通过这个小工具,和大家一起从零搭架子,一起编写码,一起探讨一种编码风格,一种架构,一种编程的思想体系,嗯,有了思想体系,则大巧不工! 体验地址是http://tool.hrinto.cn/用户名和密码都是tengfei12345开源地址是https://github.com/Langbencom/HeXiao 下面截图几张 咱们言归正传. 先从搭架子开始 架构没有银弹,但有套路.我认为要吃透三层架构,其他复杂的也是基于现实业务场景由此改编而来.万变不离其宗. 创业三年了,开发的项目很多,就这

无事写了一个学生管理系统,大家提提意见,在哪里还能改进

"""系统目录文件""" import tool tool.load()print("*"*30)print('1.新建学生')print('2.显示全部')print('3.查询学生')print('4.修改学生')print('5.删除学生')print('')print('')print('')print('0.退出系统')print("*"*30)while True: int = input('请

【IOS开发笔记02】学生管理系统

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

【IOS开发笔记01】学生管理系统(上)

端到端的机会 虽然现在身处大公司,但是因为是内部创业团队,产品.native.前端.服务器端全部坐在一起开发,大家很容易做零距离交流,也因为最近内部有一个前端要转岗过来,于是手里的前端任务好像可以抛一大坨出去了,这个时候立刻想到了切入IOS开发!!! 事实上,前端开发做到一定时间,要进步很难了,最近几个月扑到业务上便感觉突破不了目前的瓶颈,自身的前端瓶颈主要在两方面:技术深度.技术广度 其实不论深度或者广度来说都不是简单前端能说清楚的事情,不能说了解了angularJS.react等框架技术深度

学生管理系统(jsp+mysql)

1.实验目的 通过使用 Java Web 技术设计一个简单的数据库管理系统,了解前台页面和后 台编辑页面的区别,掌握 Web 服务器与 MySQL 数据库的连接和数据库操作的方 法,掌握使用 JSP 编写后台代码的方法. 2.实验内容和要求 开发一个学生管理系统,完成学生信息的查看.增加.删除和修改等功能. 对于客户端增加和修改信息页面,要使用 javascript 进行必要的数据的非空验证. 自行添加一些 css,使得页面和字体更加美观. 3.实验步骤及实验结果 (1)打开 MySQL,新建一

C语言 学生管理系统

//学生成绩管理系统 //用户名:enjoy65 //密码: enjoy65 #include<stdio.h> #include<string.h> #include<stdlib.h> //定义全局变量x,i,j,n char x; int i,j, n; struct student //定义结构体 { int id ; char name[20]; float Math; float English; float Chinese; float average;