程序设计实习报告
一、程序功能概括
- 功能介绍:
本程序是基于C++开发的一款学生信息管理软件,包括了基础的学生管理功能:增、删、改、查基础功能。
- 能管理信息有:学生基础信息(姓名、学号、年龄),学生成绩信息。
- 扩展功能有:学生成绩的排序,求平均成绩。
二、程序实现
类的设计:
程序种类的设计如下:链表类:
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类,没有任何多余的操作。
核心方法的实现:
插入方法(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; }
三、程序不足、优化 与改进
- 程序在插入学生的时候,没有实现检索重复学生的功能。
- 程序采用的是内存来存储数据,没用使用文件或者数据库,导致每次测试或者使用的时候都要手动录入数据。
- 程序界面比较不友好。
总结
通过这次课程设计, 我更加充分的理解了面向对象机制和数据结构,对于专业知识还有逻辑能力都是很大的提升。