欢迎使用CSDN-markdown编辑器

程序设计实习报告

一、程序功能概括

  1. 功能介绍:
    本程序是基于C++开发的一款学生信息管理软件,包括了基础的学生管理功能:增、删、改、查基础功能。
    - 能管理信息有:学生基础信息(姓名、学号、年龄),学生成绩信息。
    - 扩展功能有:学生成绩的排序,求平均成绩。

二、程序实现

  1. 类的设计:
    程序种类的设计如下:

    • 链表类:

      class LinkList{
          private:
              Node *head;//仅包含了一个头指针
              Node *getLastNode();//返回链表最后一个节点
              Node *getNodeById(int id);//取得学生对应的节点
              //以上两个为私有方法,仅该类可以使用
          public:
              void Insert(Student stu);//默认插到链表尾部
              void Insert(Student stu,int location);//两种插入学生的方式可供选择
              boolean Delete(int id);//如果删除失败这返回false
              Student *Search(int id);    //返回对应id的学生,如果学生不存在,这返回NULL
              boolean isEmpty();//如果表空,这返回false
      
          };
    • Node类:

      class Node{
          public:
              Student student;//整个学生类单独作为节点的数据域
              Node *next;//指针域和数据域分开,方便后续开发,提高代码质量
              Node *pre;//q前驱指针
              Node(){this->next=NULL;this->pre=NULL}//初始化指针。
              //此类不用定义公有方法来操作成员,也不用把成员设置成私有,因为用户并不能直接操作这个类
      };
    • student类:
      class Student{
          private:
              int id;
              String name;
              int age;
          public:
              Student();//在无参构造器中将各属性值初始化为0,以防出现随机中
              Student(int id,String name,int age);//初始化学生构造方法
              //id
              void setId(int id);
              int getId();
              //name
              void setName(String name);
              String getName();
              //age
              void setAge();
              int getAge();
      
      };

    类设计上的特点以及优势:

    • 使用C++的封装特性,将链表封装成一个类,这样即可以增加数据的修改和访问验证,保证数据安全,又可以简化代码,使得整个程序结构更加清晰。
    • 在Node类的处理上,将指针域和数据分开。设计更加合理
    • 链表在处理学生,以及和用户交互的过程种都是直接让用户处理Student类,没有任何多余的操作。
  2. 核心方法的实现:

    • 插入方法(Insert):

      void LinkList::Insert(Student student){
          this->getLastNode()->next=student;
      }
      
    • 删除方法(delete):

      boolean LinkList::Delete(int id){
          Node* p=getNodeById(id);
          if(!p){
              return false;
          }
          if(p->next!=NULL){
              ;//如果删除的节点为最后一个。做特殊处理
          }else{
              p->next->pre=p->pre;//此处使用了双向链表,处理起来更加高效        
      }
          p->pre->next=p->next;
          delete p;
      }
      
    • Student类的set方法:

      void Student::setId(int id){
          if(id<=0){//先判断输入的数据是否合法,在确定能否赋值成功
              return;
          }
          this->id=id;
      }
      

三、程序不足、优化 与改进

  1. 程序在插入学生的时候,没有实现检索重复学生的功能。
  2. 程序采用的是内存来存储数据,没用使用文件或者数据库,导致每次测试或者使用的时候都要手动录入数据。
  3. 程序界面比较不友好。

总结

通过这次课程设计, 我更加充分的理解了面向对象机制和数据结构,对于专业知识还有逻辑能力都是很大的提升。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值