成绩
课程设计报告
题 目 学籍信息管理系统
课 程 名 称 面向对象程序设计课程设计 院 部 名 称 软件工程 专 业 软件工程 班 级 13软件工程1班 学 生 姓 名 学 号
课程设计地点 A203 课程设计学时 20学时 指 导 教 师 李尤丰
金陵科技学院教务处制
1
一、课程设计的目的和要求
目的:
该课程设计的目的采用面向对象的程序设计语言,开发实现一个应用程序,主要目的是使学生更好的掌握面向对象程序设计语言及其开发工具,掌握如何使用面向对象的程序设计语言设计一个小的软件系统。通过该课程设计培养学生分析和解决实际问题的能力,培养学生综合应用基本概念,基本原理,和技术方法的能力,真正做到学以致用,使课本上抽象的理论,方法与具体的实践应用相结合。
要求:
1.课程设计任务
完成选定的题目的开发工作,并接受程序运行检查。要求提交报告一份。 2.在本课程设计过程中要求学生:
(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;
(2)按照课程设计的题目要求,独立地完成各项任务,不允许相互抄袭; (3)按时到计算中心上机,并接受教师的检查; (4)认真撰写课程设计报告。 .
二、系统需求分析
本系统功能主要针对一个班级新生入学、中途学生转入转出学校以及学 生考试成绩的录入查询等等进行有效的管理。这些学生的各项信息,帮主学校和老师及时准确地掌握学生的情况。 基本功能:
(1)学生信息添加:添加学生的基本信息,包括学号、姓名、性别、出生日期、
政治面貌、家庭住址等;
(2)学生信息查询:选择(1)根据学生的姓名查找,调用strcmp()函数,找出
后从文件中输出学生的信息;选择(2)根据学号进行查找,调用指针,查找出后将信息从文件中输出;
2
(3)学生信息修改:该模块分为两步,调用strcmp()函数按照学生姓名进行查
找,查找是否存在该学生,若不存在则输出“该学生不存在,请重新输入”,若存在则调用该学生信息,重新输入对原信息进行覆盖; (4)学生信息删除:调用指针链表根据学生的学号进行数据的删除; (5)学生信息显示:显示出所有录入的学生的信息; (6)学生信息保存:将学生信息写入文件; (7)学生信息读取:从文件中读取学生的信息;
三、总体设计 框架结构:
学籍信息管理系统 预 处 理 模 块 主 函 数 模 块 判 断 选 择 模 块 显 示 模 块 局变量定义
定义;类定义;全文件包括:结构体函数功能实现 执行菜单功能 显示信息数据 添 加 查 询 修 改 删 除 读 取 保 存 学籍管理系统应便于对学籍进行分类和管理,提高工作效率,便于操作,此软件由于只是一个初级产品,只要能构建一个结构,达到一些帮助查询、索引等基本功能和要求即可。整体设计了一个学生类,在学生类中完成各项操作。
3
四、详细设计 修改学生数据模块:
void student::change(date *head) {
char name[9]; char c; do { bool flag2=0; date *stu=head ; cout<<\"请输入您要修改的学生的姓名:\"; cin>>name; do { if(strcmp(name,stu->name)==0) //使用字符串比较学生姓名 { flag2=1; //标记,表示找到对应学生 cout<<\"请输入新的出生年、月、日:\"; cin>>stu->year>>stu->month>>stu->day; cout<<\"请输入新的政治面貌:\"; cin>>stu->zhengzhi ; cout<<\"请输入新的家庭住址:\"; cin>>stu->adress; cout<<\" 学号 姓名 性别 出生年月日 政治面貌 家庭住址\"< cout< 4 入!!!!!!!\"< }while(c=='y'); } 此处调用strcmp()通过字符串的比较来找出对应的学生,直接在原来的数据 上进行覆盖修改,在if(c!='y'&&c!='n')中进行输入完成时后是否进行输入的字符的规范输入。 五、测试、调试过程 软件测试运行图: 初始界面: 添加学生信息: 5 查询学生信息: 根据姓名查询 根据学号查询: 6 修改学生数据: 学生数据删除: 学生数据显示: 7 学生数据保存: 学生数据读取: 六、结论与体会 知道课题后我们选择了使用链表,它可以实现无序的在内存中存放,只要有一个头结点,就可以对整个链表进行相关的操作,在调式时遇到了很多问题,最多的是有些程序看起来很简单但是要把所有的连接在一起就有很多问题出现了,结果我发现链表的建立、查找、删除、插入以及修改还有指针这一块知识还得好好的加强,当我在编写学生成绩管理系统时,出现了许多问题,我到处查找资料同时也向老师和同学请教,经过一个星期的努力我总算实现了基本功能。我现在体会到程序的调试是相当的重要的。在使用指针时要特别注意用过后的指针不使用就要删除,以防出错。链表的尾部要指向NULL,这点是很重要的。 我们所做的设计“学生学籍管理信息系统”是集聚了全组每一位设计成员的 8 心思。在我们的成果里,可以看到我们每一位设计者所做出的努力。在系统的设计过程中,我们也遇到了一些困难和迷惑。但是在我们全组设计成员的齐心协力与不同组同学之间的互相的帮助下,我们克服了一个又一个的问题,保证了设计作业的顺利进行。 通过完成本次C++程序设计的任务,使我熟练和掌握了所学的有关c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,类的继承等等。可以所学有所学,所有所用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。我们遇到的问题这些问题,又都是课本上很少提到的、更深一层的知识领域和应用领域。这些问题,并不是我们平时只靠课本,就可以轻易解决的。所以,锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。更使我加强了灵活应用理论知识的能力。 当然,此次任务的完成,也体现出同学之间的团结精神。所遇种种难以解决的问题,大家都会把它当作共同遇到的问题,在一起共同探讨,共同发挥自己所学和所知,投入式的互相帮助和解决困难。 七、参考文献 [1]谭浩强编,《C++面向对象程序设计》,清华大学出版社,2005年7月出版 [2]韩滨 魏海萍,《C++类库使用手册》,电子工业出版社,2007年7月出版 [3]文件的输入输出(百度百科http://baike.baidu.com/view/1786145.htm?fr=aladdin) 9 附录:源程序 #include double amount=0; struct date { char name[9]; char sex[3]; char zhengzhi[5]; char adress[20]; double num; double year; double month; double day; date *next; }; class student { public: date d; void add(date *head); void change(date *head); void del(date *head); void search1(date *head); void search2(date *head); void load(date *head); void menu(); void show(date *head); void save(date *head); void chushihua(date *head); }; /////////////////////////////////*主函数*//////////////////////////////////////// int main() { student s; char x; bool flag2=0; date *head=new date; //初始化学生数据 head->next=NULL; cout<<\" ★ 欢迎使用学籍信息管理系统 ★ s.menu(); //显示菜单 10 \\n \"; do { do { cin>>x; if((x>='0'&&x<='8')) flag2=1; else { cout<<\"指令错误!!!!!!!!!!\"< cout<<\"********************************************************************************\\n\"; 11 s.menu(); break; } case '2': cout<<\"*********************************学生信息修改******************************\\n\"; s.change(head); cout<<\"********************************************************************************\\n\"; s.menu(); break; case '3': cout<<\"*********************************学生信息删除******************************\\n\"; s.del(head); s.show(head); cout<<\"********************************************************************************\\n\"; s.menu(); break; case '4': cout<<\"*********************************显示学生信息******************************\\n\"; s.show(head); cout<<\"********************************************************************************\\n\"; s.menu(); break; case '5':cout<<\"*********************************读取学生信息******************************\\n\"; s.load(head); cout<<\"********************************************************************************\\n\"; s.menu(); break; case '6':cout<<\"*********************************保存学生信息******************************\\n\"; s.save(head); cout<<\"********************************************************************************\\n\"; s.menu(); break; case '7': cout<<\"********************************************************************************\\n\"; cout<<\" 已退出学籍信息管理系统, 欢迎您再次使用 ! \\n\"; 12 cout<<\"********************************************************************************\\n\"< /////////////////////////////////*显示菜单*//////////////////////////////////////// void student::menu() { cout<<\" **************************************************\\n\"; cout<<\" * 菜 单 *\\n\"; cout<<\" * ^^^^^^^^^^ *\\n\"; cout<<\" * 请选择: *\\n\"; cout<<\" * [0]-添加; [1]-查询; [2]-修改; *\\n\"; cout<<\" * [3]-删除; [4]-显示; [5]-读取 ; *\\n\"; cout<<\" * [6]-保存; [7]-退出; *\\n\"; cout<<\" **************************************************\\n\"; cout<<\" 请选择相应的数字进行操作: \"; } ////////////////////////////////*初始化学生数据*/////////////////////////////////////// void student::chushihua(date *head) { int j=0; char c; cout<<\"注意:初始化操作将删除 /////////////////////////////////*显示学生数据*//////////////////////////////////////// void student::show(date *head) { date *stu=head; cout<<\" 学号 姓名 性别 出生年月日 政治面貌 家庭住址\"< while(stu->next!=NULL) { stu=stu->next; cout< /////////////////////////////////*添加学生数据*//////////////////////////////////////// void student::add(date *head) { char c; date *p=head; do { date *stu=new date; cout<<\"学号:\"; stu->num=amount+16; cout< 14 cout<<\"请输入政治面貌:\"< 15 cout< /////////////////////////////////*用学号查询学生数据*//////////////////////////////////////// void student::search2(date *head)//学号查询 { char c;double no; do { date *stu=head->next; int flag=0; cout<<\"请输入你要查询的学生学号:\"; cin>>no; do { if(stu!=NULL&&no==stu->num) { flag=1; cout<<\"您要查询的学生是:\"< cout<<\" 学号 姓名 性别 出生年月日 政治面貌 家庭住址\"< /////////////////////////////////*修改学生数据*//////////////////////////////////////// void student::change(date *head) { char name[9]; char c; do { bool flag2=0; date *stu=head ; cout<<\"请输入您要修改的学生的姓名:\"; cin>>name; do { if(strcmp(name,stu->name)==0) { flag2=1; cout<<\"请输入新的出生年、月、日:\"; 17 cin>>stu->year>>stu->month>>stu->day; cout<<\"请输入新的政治面貌:\"; cin>>stu->zhengzhi ; cout<<\"请输入新的家庭住址:\"; cin>>stu->adress; cout<<\" 学号 姓名 性别 出生年月日 政治面貌 家庭住址\"< /////////////////////////////////*删除学生数据*/////////////////////////////////////// void student::del(date *head) { char c;float no; do { int flag=0; cout<<\"请输入你要删除的学生学号:\"; cin>>no; 18 date *q,*p; q=head; while(q->next!=NULL&&q->next->num!=no) q=q->next; if(q->next!=NULL) { flag=1; p=q->next; q->next=q->next->next; amount--; cout<<\"......删除成功!\"; } if(flag==0) cout<<\"对不起!您要删除的学生不存在!!!!!!!\"< /////////////////////////////////*读取学生数据*//////////////////////////////////////// void student::load(date *head) { date *p=head; ifstream cin1(\"save.txt\"); date *stu=new date; int x; cin1>>x; while(x--) { date *stu=new date; cin1>>stu->num>>stu->name>>stu->sex>>stu->year>>stu->month>>stu->day>>stu->zhengzhi>>stu->adress; stu->next=p->next; p->next=stu; p=p->next; } cout<<\"数据读取成功 \"< 因篇幅问题不能全部显示,请点此查看更多更全内容