1. 课题来源
随着新世纪的到来,计算机以前所未有的速度在全世界普及,人们更深切的感受到了计算机在生活和工作中的作用越来越重要,现在,计算机技术以渗透到人类社会生活的各个领域,越来越多的职业需要具有计算机的应用技能。掌握计算机成为职业的需要,更是事业发展的需要。 在C++学习了一段时间之后,我们开始入了课程设计。在看了老师给的题目后我发现例题的学生管理系统仅仅只能让老师使用,且安全性不高,所以我的题目是:《新生管理系统》。里面包含了登入、老师端、学生端。马上就是2020届新生入学再认真思考并且结合自己的实际情况后,我选择了写这个。紧紧围绕着面向对象程序的封装、继承和多态特性。
2. 任务描述 **
马上就是2020届新生入学,老师要逐个录入其信息,如:学生姓名,性别,专业,出生日期,家庭地址,高考成绩。学生要查询自己的信息,在老师和学生登入时还需要输入账号密码来确认身份。要求设计链表类来实现,并统计学生人数。
**
账号密码界面:
登录账号请按1
注册账号请按2
修改密码请按3
退出系统请按0
老师端:
1.新增学生信息
2.插入学生信息
3.删除学生信息
4.学生信息搜索
5.修改学生信息
6.按照高考成绩排序
7.统计男/女人数
8.读取学生信息
9.保存信息退出
学生端:
1.增加本人信息
2.修改本人信息
3.搜索本人信息
4.保存信息退出
仅有部分代码,详细代码请联系我哟
Student *information::statistics(Student*head)//统计男女人数
{
p1=new Student;//链表
p1=head;//头结点
int x=0,y=0;
char sex1[3];
char sex2[3];
strcpy(sex1, "男");//字符串复制
strcpy(sex2, "女");
if(p1==NULL){
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
return 0;
}
for(p1=head; p1!=NULL; p1=p1->next)
{
if(strcmp(sex1,p1->sex)==0 )
{
x=x+1;
}
if(strcmp(sex2,p1->sex)==0)
{
y=y+1;
}
}
cout<<"男: "<<x<<endl;
cout<<"女: "<<y<<endl;
return head;
}
Student *information::add(Student *head)//增加学生
{
p1=p3=new Student;
p1=head;
char sex1[3];
char sex2[3];
strcpy(sex1, "男");
strcpy(sex2, "女");
if(p1==NULL)
{
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
return 0;
}
else
{
cout<<"请输入要添加学生的信息!\n";
cout<<"姓名: \t";
cin>>p3->name;
cout<<"专业: \t";
cin>>p3->study;
cout<<"性别: \t";
cin>>p3->sex;
while(strcmp(sex1,p3->sex)!=0 &&strcmp(sex2,p3->sex)!=0 )
{
cout<<"请输入格式 男/女,请重新输入!"<<endl;
cout<<"性别: \t";
cin>>p3->sex;
}
cout<<"家庭住址: \t";
cin>>p3->addr;
cout<<"出生年:";
cin>>p3->birth[0];
while(p3->birth[1]<1 || p3->birth[1]>12)
{
cout<<"出生月:";
cin>> p3->birth[1];
if(p3->birth[1]<1 || p3->birth[1]>12)
{
cout<<"月份应为1-12月,请重新输入!"<<endl;
}
}
cout<<"出生日:";
cin>>p3->birth[2];
while(p3->birth[2]<1 || p3->birth[2]>31)
{
cout<<"每月应为1-31天,请重新输入!"<<endl;
cout<<"出生日:";
cin>>p3->birth[2];
}
cout<<"高考成绩:";
cin>>p3->result;
while(p3->result<0 || p3->result>750)
{
cout<<"高考成绩必须在0-750之间,请重新输入!"<<endl;
cout<<"高考成绩:";
cin>>p3->result;
}
cout<<"\n";
p3->next=p1->next;
p1->next=p3;
cout<<"添加成功!\n";
}
write_file(head);//写入
return head;//返回头结点
}
Student *information::delet(Student *head)//删除学生
{
p2=p1=new Student;
if(head==NULL)
{
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
return 0;
}
cout<<"请输入要删除学生的名字:\n";
cin>>name;
p2=p1=head;
int j=0;
if( ( strcmp(name,head->name)==0 ) && (head!=NULL))//把输入的名字和P1头结点中的名字对比,如果相等
{
head=head->next;//删除
free(p1);//释放P1
j=1;
}
else
{
p1=head->next;//下一个
while(p1!=NULL)
{
if(strcmp(name,p1->name)==0)//继续对比,如果相等
{
p2->next=p1->next;
free(p1);//删除
j=1;//删除成功的标记
break;
}
else//不相等就下一个
{
p2=p1;
p1=p2->next;
}
}
}
if(j==0)
cout<<"此学生不存在,删除失败!\n";
else
cout<<"删除成功!\n";
write_file(head);//写入
return head;//返回
}
void *information::search(Student *head)//查找学生信息
{
char name[20];
p1=new Student;
cout<<"请输入要查找学生的姓名:\n";
cin>>name;
p1=head;
for(p1=head; p1!=NULL; p1=p1->next)
{
if(strcmp(name,p1->name)==0 )//把输入学生名字和P1中名字进行对比
{
cout<<"姓名:"<<p1->name<<" 性别:"<<p1->sex<<" 专业:"<<p1->study;
cout<<" 家庭住址:"<<p1->addr<<endl;
cout<<p1->birth[0]<<"年";
cout<<p1->birth[1]<<"月:"<<p1->birth[2]<<"日 出生:";
cout<<"年龄:"<<2020-p1->birth[0]<<endl;
cout<<"高考成绩:"<<p1->result<<"\n\n";
}
}
return head;
};
Student *information::modify(Student *head)//修改学生信息
{
if(head==NULL)//不存在
{
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
cout<<"请先选择8.读取学生信息"<<endl;
return 0;
}
char name1[12];
char sex[3];
char study[12];
char addr[12];
int birth[3];
int result;
p1=new Student;
int j=0;//标志
p1=head;
cout<<"请输入你要更改学生的姓名:\n";
cin>>name;
if(strcmp( name, head->name)==0)//头结点比较
{//把输入的姓名等copy到链表里
cout<<"显示要修改学生的信息:\n";
s.displaynode(p1);//显示
cout<<"请输入要更改学生的信息:\n";
cout<<"姓名: \t";
cin>>name1;
cout<<"性别: \t";
cin>>sex;
cout<<"专业: \t";
cin>>study;
cout<<"家庭住址: \t";
cin>>addr;
cout<<"出生年:";
cin>>birth[0];
cout<<"出生月:";
cin>>birth[1];
cout<<"出生日:";
cin>>birth[2];
cout<<"高考成绩:";
cin>>result;
strcpy(head->name,name1);//姓名复制
strcpy(head->sex,sex);//性别复制
strcpy(head->study,study);//专业复制
strcpy(head->addr,addr);//地址复制
head->birth[0]=birth[0];
head->birth[1]=birth[1];
head->birth[2]=birth[2];
head->result=result;
j=1;
}
else//除了头结点的下一个
{
p1=head->next;
while(p1!=NULL)
{
if(strcmp(p1->name,name)==0)
cout<<"显示要修改学生的信息:\n";
s.displaynode(p1);
cout<<"请输入要更改学生的信息:\n";
cout<<"姓名: \t";
cin>>name1;
cout<<"性别: \t";
cin>>sex;
cout<<"专业: \t";
cin>>study;
cout<<"家庭住址: \t";
cin>>addr;
cout<<"出生年:";
cin>>birth[0];
cout<<"出生月:";
cin>>birth[1];
cout<<"出生日:";
cin>>birth[2];
cout<<"高考成绩:";
cin>>result;
strcpy(p1->name,name1);
strcpy(p1->sex,sex);
strcpy(p1->study,study);
strcpy(p1->addr,addr);
p1->birth[0]=birth[0];
p1->birth[1]=birth[1];
p1->birth[2]=birth[2];
p1->result=result;
j=1;
break;
}
}
if(j==0)//没有找到
cout<<"没有找到你要更改的学生,更改失败!\n";
else
cout<<"更改成功!\n";
write_file(head);
return head;
}
课程设计总结
通过对C++课程设计,我觉得自己在软件的设计与开发方面有了进一步的提高。完成此次C++课程设计并非想象中的那么简单,类的成员及类之间关系的设计是最重要的,一但设计的不好,后续工作就无法完成。还有就是界面的设计尽量要做到人性化。文件的写入与读取是一个难点,一不小心便会输出乱码或异常现象,所以我在这一块倍加小心,花了很多时间在文件读取上。至于面向对象方面,我基本做到了封装性,继承性,及多态性的设计理念。但我的设计也并非是完美的,由于没有学过MFC的设计,我的界面并非窗口式的,而只是基本的菜单式选择,在这一方面我还要多加学习。在这次程序设计课中,真的是让我受益非浅,突然发现自己写程序还挺有意思的,自己也开始对程序产生了前所未有的兴趣,认真地看老师写的程序,发现我们看懂一个程序,其实不难,难的是对于一个程序里面蕴含的思想的理解,我们要掌握一个算法,不仅仅限于读懂,更重要的是理解老师的思路,学习老师解决问题的方法。自己在学程序的时候发现有很多地方没有真正的落实清楚,有一些知识点是懵懵懂懂的,而且自己在这方面的练习也太少了,所以总是会有各种各样的问题,在自己坚持不懈的查阅资料、查看老师的代码、问同学,终于完成了这个代码,当我全身心的投入时,实际上是一件非常有乐趣的事情。此次的课程设计更让我数据结构这门课的魅力所在,与小组成员讨论各个方面的问题,最终完成了这个代码,非常有成就感。
总的来说,这次课程设计是非常有意义的,让我提前进入了一个程序员的状态,至少是一个初级程序员的状态,还有就是让我明白了成功的两个必备条件就是毅力和思想。