数据结构课程设计-学生信息管理系统
- 格式:doc
- 大小:956.82 KB
- 文档页数:37
数据结构课程设计学生信息管理系统学生信息管理系统是一种用于管理学生信息的软件系统。
它主要用于学校、教育机构或者其他组织中的学生信息管理工作。
该系统可以匡助学校或者教育机构高效地采集、存储和管理学生的个人信息、学籍信息、成绩信息等。
一、系统架构学生信息管理系统通常由前端界面、后端数据库和服务器组成。
1. 前端界面:提供给用户使用的界面,包括学生信息录入、查询、修改和删除等功能。
界面设计应简洁、直观,方便用户操作。
2. 后端数据库:用于存储学生信息的数据库,可以使用关系型数据库如MySQL或者非关系型数据库如MongoDB。
数据库应具备高效的读写能力和良好的数据结构设计,以提高系统的性能和稳定性。
3. 服务器:用于承载学生信息管理系统的运行,包括前端界面的展示和与后端数据库的交互。
服务器应具备高并发处理能力,以应对大量用户同时访问的情况。
二、功能需求学生信息管理系统应具备以下功能:1. 学生信息录入:提供学生信息的录入界面,包括学生姓名、性别、出生日期、联系方式等基本信息的录入。
2. 学生信息查询:提供学生信息的查询功能,可以根据学生姓名、学号、班级等条件进行查询,并展示查询结果。
3. 学生信息修改:提供学生信息的修改功能,可以根据学生学号或者其他惟一标识符进行信息的修改。
4. 学生信息删除:提供学生信息的删除功能,可以根据学生学号或者其他惟一标识符进行信息的删除。
5. 学生成绩管理:提供学生成绩的录入、查询、修改和删除功能,可以根据学生学号或者其他惟一标识符进行成绩信息的管理。
6. 学生信息统计:提供学生信息的统计功能,可以统计学生的人数、男女比例、年龄分布等信息,并以图表形式展示。
7. 用户权限管理:提供不同用户角色的权限管理功能,如管理员、教师和学生等角色,不同角色具有不同的系统访问权限。
三、数据结构设计为了高效地存储和管理学生信息,需要设计合适的数据结构。
1. 学生信息表:用于存储学生的基本信息,包括学生学号、姓名、性别、出生日期、联系方式等字段。
课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目:学生成绩管理系统已知技术参数和设计要求:现有学生成绩信息文件1(cj1。
txt),内容如下姓名学号语文数学英语张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47…. 。
. 。
…学生成绩信息文件2(cj2.txt),内容如下:姓名学号语文数学英语陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77…. 。
.. .. …试编写一管理系统,其基本功能要求:实现对两个文件数据进行合并,生成新文件cj3.txt抽取出三科成绩中有补考的学生并保存在一个新文件cj4.txt对合并后的文件3。
txt中的数据按总分降序排序(至少采用两种排序方法实现)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)要求使用结构体,链或数组等实现上述要求。
采用多种方法且算法正确者,可适当加分。
要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)数据结构课程设计说明书一、需求分析1、问题描述现如今,学校人数的暴涨,对学生基本信息的录入,保存量越来越大,为了简化对工作人员的操作,故设计一个程序来完成对学生基本信息的录入,保存,编辑等简单操作。
2、基本任务(1)对学生信息表cj1和cj2进行合并;(2)把合并的信息生成cj3;(3)把cj3中有补考的学生信息生成cj4;(4)对合并后的文件3。
txt中的数据按总分降序排序;(5)输入一个学生姓名后,能查找到此学生的信息并输出结果。
二、概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:1、主界面设计为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。
课程设计说明书学号:班级: 姓名:设计题目: 学生信息管理系统设计地点:设计时间: 至成绩评定:1、工作量: A(),B(),C(),D(),F( )2、难易度:A(),B(),C(),D(),F( )3、答辩情况:A(),B(),C(),D(),F( )4、报告规范度:A(),B(),C(),D(),F( )5、学习态度:A(),B(),C(),D(),F( )总评成绩:___________________________指导教师:___________________________一、设计题目与要求1、设计目的:编写一个学生信息管理系统,实现对学生信息的基本管理。
把所学数据结构知识应用到实际软件开发中去。
设计内容:本系统应完成一下几方面的功能:(1)增加一个学生的信息(需输入要增加学生的所有信息);(2)统计本班学生总人数及男女生人数。
(3)分别按照学号查找学生的信息;若找到则输出该学生全部信息,否则输出查找不到的提示信息。
(4)按学号对所有学生信息排序,并输出结果;(5)删除一个学生的信息(需指定要删除学生的学号);同时显示删除后的结果。
2、设计要求:(1)用菜单调用(2)作为一个完整的系统,应具有友好的界面和较强的容错能力(3)上机能正常运行,并写出课程设计报告二、概要设计1. 功能需求分析学生信息管理系统设计学生信息包括:学号,姓名,性别,出生年月,电话使之提供以下功能:1.系统以菜单方式工作2.插入新的学生信息3.删除某学号的学生信息4.查找某学号的学生信息5.对学生信息排序6.统计学生人数7.输出学生信息2 总体设计功能结构图设计依据程序的功能需求,描述该系统功能的结构图如下:图1 系统功能结构图模块简介依据程序的功能模块的划分,各模块定义如下:(1)增加学生信息模块名:void addstu(LinkList *&L)模块描述:通过此模块可以在学生链表中添加新的学生信息。
广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术6班学院:智能制造学院专业:指导教师:目录一、问题描述与基本要求 (3)1.1问题描述 (3)1.2基本要求 (3)二、数据结构的设计 (3)2.1数据结构的选择 (3)2.2单链表的定义 (3)2.3重要函数的定义及说明 (4)三、软件模块结构图....................... 错误!未定义书签。
3.1大体模块关系图 (13)3.2各模块具体分析..................... 错误!未定义书签。
四、程序流程图 (15)五、源程序 (17)六、调试分析............................. 错误!未定义书签。
6.1程序错误修改及完善的过程 (37)6.2最终程序所有功能运行结果........... 错误!未定义书签。
6.3测试数据 (39)七、用户使用手册 (40)八、心得体会............................. 错误!未定义书签。
一、问题描述与基本要求1.1问题描述设计一个学生管理系统,建立初始学生成绩,添加/插入,查找,修改,删除学生成绩。
1.2基本要求系统设计要求:1、能比较迅速地实现添加学生的学号,姓名和成绩2、能比较迅速地通过学生的学号或姓名查询、修改或删除学生成绩3、当有学生时,输出所有学生的成绩信息,包括语文,数学,英语的成绩二、数据结构的设计2.1数据结构的选择课程设计题目的要求是,要较简单迅速地实现添加、查询、修改、删除学生成绩的的功能,于是我很自然地想到了可以用单链表的结构,通过编写相应功能函数来实现建立新结点、删除结点、修改结点中数据域的内容、输出结点数据域中的内容等功能,即可满足课程设计题目的要求。
2.2单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。
学生管理系统数据结构设计
对于学生信息的数据结构,可以采用面向对象的方式进行设计。
可以
创建一个学生类,其中包含上述所有的字段,每个学生的实例对象即对应
一个学生的详细信息。
课程信息是学生管理系统中与学生学习成绩相关的数据。
课程信息的
数据结构应该包含课程的基本信息,例如课程ID、课程名称、授课教师、开课时间等。
此外,还可以添加其他的字段,例如课程介绍、学分等。
同样地,可以创建一个课程类,其中包含上述所有的字段,每个课程
的实例对象即对应一个课程的详细信息。
成绩信息是学生管理系统中用于记录学生学习成绩的数据。
成绩信息
的数据结构应该包含学生学号、课程ID和分数等字段。
此外,还可以添
加其他的字段,例如考试日期、考试类型等。
为了方便查询和管理成绩信息,可以采用一个二维数组或者一个哈希
表的数据结构。
其中,行表示学生,列表示课程,每个元素即为学生在相
应课程上的成绩。
班级信息是学生管理系统中用于管理班级的数据。
班级信息的数据结
构应该包含班级号、班主任、学生人数等字段。
此外,还可以添加其他的
字段,例如班级名称、班级成绩等。
为了方便查询和管理班级信息,可以创建一个班级类,其中包含上述
所有的字段,每个班级的实例对象即对应一个班级的详细信息。
综上所述,学生管理系统的数据结构设计包括学生信息、课程信息、
成绩信息和班级信息这四个方面。
通过合理设计这些数据结构,可以实现
对学生信息的增删改查,对课程信息的管理,对成绩信息的录入和查询,以及对班级信息的管理等功能。
#include<stdio.h>#include <malloc.h>#include<string.h>#include<stdlib.h>#include <io.h>//建立结构体struct student{long num;//学号char name[10];//姓名char sex[10];//性别char id[20];//身份证号char adress[80];//家庭地址long tel; //电话号码struct student * next;};/*此学生信息管理系统一共分为八个模块,分别为信息录入、信息浏览、信息查询、信息删除、信息修改、信息插入、信息保存、信息读取,其中信息保存和信息读取为隐藏模块。
系统界面清晰,操作简单,用户输入密码之后就可进入进行各种操作。
*/FILE *fp;//文件指针int count=0;//记录学生数量struct student *head;//学生信息录入struct student *input(){struct student *head=NULL; //定义头指针struct student *p1,*p2; //定义结点while(1){int choice;printf(" |------------------| \n");printf(" | 【1】录入学生信息| \n");printf(" | 【0】退出| \n");printf(" |------------------| \n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" *****学生信息录入模块***** \n");p1=(struct student *)malloc(sizeof(struct student));//开辟一个新结点printf(" 请输入学号: ");scanf("%ld",&p1->num);printf(" 请输入姓名: ");scanf("%s",p1->name);printf(" 请输入性别:");scanf("%s",p1->sex);printf(" 请输入身份证号:");scanf("%s",&p1->id);printf(" 请输入家庭住址:");scanf("%s",p1->adress);printf(" 请输入手机号:");scanf("%ld",&p1->tel );count++;if(head==NULL){head=p1;}elsep2->next=p1;//p1指向下一个结点p2=p1;}else if(choice==0)break;elseprintf(" 选择错误!请重新选择!\n");}p1->next=NULL;return head;}//学生信息浏览void displayall(struct student *head){struct student *p1=head;if(head==NULL){printf("无学生信息!\n");return;}else{printf("总共有%d个学生!\n",count);printf(" 所有学生信息为:\n");printf("***************************************************************\n");while(p1!=NULL){printf("\n学号:%ld\n姓名:%s\n性别:%s\n身份证号:%s\n家庭住址:%s\n手机号:%ld\n\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}}}void display(struct student *p1){{printf(" 该学生信息为:\n");printf("***************************************************************\n");printf(" \n学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");printf("%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num,p1->name,p1->sex,p1->id,p1->adress,p1->tel); }}//查询学生信息struct student *query(struct student *head){ struct student *p1;int choice;int num;char name[10];if(head==NULL) {printf("链表为空或无学生记录!\n");return head;}while(1){printf(" |---------------|\n");printf(" |【1】按学号查询|\n");printf(" |【2】按姓名查询|\n");printf(" |【0】退出|\n");printf(" |---------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" 请输入要查询学生的学号:"); scanf("%ld", &num);p1=head;while(1){if(num == p1->num) {printf(" *****找到该学生信息*****\n"); display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num); break;}else p1=p1->next;}}else if(choice==2){printf(" 请输入要查询学生的姓名:"); scanf("%s", name);p1=head;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");}else{while((strcmp(name, p1->name)!=0)&& p1->next!=NULL) { p1=p1->next;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");display(p1);break;}elseprintf(" 没有姓名为%s的学生!\n",name);}}}else if(choice==0)break;elseprintf(" 选择错误!\n");}return (p1);} //删除学生信息struct student *del(struct student *head){struct student * p1, * p2;int num,choice;if(head==NULL){printf(" 链表为空或无学生记录!\n");return head;}printf(" 请输入要删除的学生学号:");scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {printf(" ****找到该学生信息****\n");display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num);return head;}else{p2=p1;}}printf(" |-------------|\n");printf(" |【1】确认删除|\n");printf(" |【0】返回|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){count--;if(p1 == head)head=p1->next;elsep2->next=p1->next;free(p1);printf(" 该学生信息已删除!\n");}else if(choice==0)return head;elseprintf("无效选择,请重新输入!");return head;}//修改学生信息struct student *change(struct student *head){ struct student *p1,*p2;int choice;long num;int flog;if(head==NULL){printf(" 链表为空或无学生记录!\n"); return head;}printf(" 请输入要修改的学生的学号:"); scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {flog=1;break;}if(p1->next==NULL){flog=0;break;}else{p2=p1;p1=p1->next;}}if(flog==0){printf(" 没有学号为%d的学生信息!\n",num); }else if(flog==1){printf(" ****找到该学生信息****\n"); display(p1);while(1){printf(" |**********************|\n");printf(" |【1】修改姓名|\n");printf(" |【2】修改性别|\n");printf(" |【3】修改身份证号|\n");printf(" |【4】修改家庭住址|\n");printf(" |【5】修改电话号码|\n");printf(" |【0】退出|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{printf(" 请输入修改后的姓名:");scanf("%s",p1->name);break;}case 2:{printf(" 请输入修改后的性别:");scanf("%s",p1->sex);break;}case 3:{printf(" 请输入修改后的身份证号:"); scanf("%s",&p1->id);break;}case 4:{printf(" 请输入修改后的家庭住址:"); scanf("%s",p1->adress);break;}case 5:{printf(" 请输入修改后的电话号码:");scanf("%ld",&p1->tel);break;}case 0:return head;default:printf(" 无效选择,请重新输入!\n");}}}return head;}//插入一个学生信息struct student *insert(struct student *head){struct student *p1,*p2,*insertstu;int place,choice,mark=0,num=0;if(head==NULL){printf(" 信息为空请选择信息录入!\n");return head;}while(1){printf(" |-------------|\n");printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){insertstu=(struct student *)malloc(sizeof(struct student));displayall(head);printf(" 请输入要插入的位置:");scanf("%d",&place);if(place==1){mark=1;insertstu->next=head;head=insertstu;}else{for(p2=p1=head,num=1;p1->next !=NULL;p2=p1,p1=p1->next,num++){ if(num==place){mark=1;insertstu->next=p1;p2->next=insertstu;break;}}if(place==num){mark=1;insertstu->next=p1;p2->next=insertstu;}else if(place==num+1){mark=1;p1->next=insertstu;insertstu->next=NULL;}else if(place>num+1){printf(" 超出插入范围,请核对!\n"); continue;}}if(mark==1){printf(" 请输入要插入的学生信息!\n"); printf(" 请输入学号:");scanf("%ld",&insertstu->num);printf(" 请输入姓名:");scanf("%s",insertstu->name);printf(" 请输入性别:");scanf("%s",insertstu->sex);printf(" 请输入身份证号:");scanf("%s",&insertstu->id);printf(" 请输入家庭住址:");scanf("%s",insertstu->adress);printf(" 请输入手机号:");scanf("%ld",&insertstu->tel );count++;display(insertstu);}}else if(choice==0)break;elseprintf("无效选择,请重新输入!\n");}return head;}//学生信息保存int SaveStudent(struct student *head){struct student *p1;p1=head;if((fp=fopen("student.txt","w+"))==NULL){printf("文件打开失败!\n");exit(0);}fprintf(fp,"%d\n",count);fprintf(fp,"学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");while(p1!=NULL){fprintf(fp,"%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}return 1;fclose(fp);}void freeAll(struct student *head){struct student *p1, *p2;p1=p2=head;while(p1){p2=p1->next;free(p1);p1=p2;}}struct student *LoadStudent(){struct student *head;struct student *p1, *p2;fp = fopen("student.txt", "r+");if (!fp){printf("文件打开错误!\n");exit(0);}fscanf(fp,"%d\n", &count);fscanf(fp, "学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");head=p1=p2=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); while(!feof(fp)){p1=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); p2->next=p1;p2=p1;}p2->next = NULL;fclose(fp);return head;}//主菜单void menu(struct student *head){int n;while(1){int choice;printf(" |*****学生信息系统*****|\n");printf(" |**********************|\n");printf(" |【1】录入学生信息|\n");printf(" |【2】浏览学生信息|\n");printf(" |【3】查询学生信息|\n");printf(" |【4】删除学生信息|\n");printf(" |【5】修改学生信息|\n");printf(" |【6】插入学生信息|\n");printf(" |【0】退出系统|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{if(head==NULL){head=input();}else{head=insert(head);}break;}case 2:{displayall(head);break;}case 3:{query(head);break;}head=del(head);break;}case 5:{change(head);break;}case 6:{head=insert(head);break;}case 0:{n=SaveStudent(head);freeAll(head);printf("信息已成功保存!\n");return;}default:printf("无效选项,请重新输入!\n");}}}//欢迎界面void welcome(){int choice;printf(" ************************\n"); printf(" * *\n");printf(" * 欢迎使用学生信息系统*\n"); printf(" * *\n");printf(" ************************\n"); printf(" * *\n");printf(" ************************\n"); printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);system("cls");if(choice==1){if((fp=fopen("student.txt","r+"))==NULL){ menu(head);}head=LoadStudent();menu(head);}}else{return;}}//程序入口void main(){char userName[9];char userPWD[7];int i;for(i=0;i<3;i++){printf("\n\n\n\n\n\n\n");printf("\n请输入您的用户名:");scanf("%s", userName);printf("\n请输入您的密码:");scanf("%s", userPWD);if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0)){ printf("用户名和密码输入正确!\n");system("cls");//用户名和密码正确,显示欢迎菜单welcome();break;}else{if(i<2){system("cls");//用户名或密码错误,提示用户重新输入printf("用户名或密码错误,请重新输入!");}else{system("cls");//连续3次输错用户名或密码,退出系统。
学生信息管理系统数据结构课程设计学生信息管理系统数据结构课程设计1、项目背景1.1、项目简介学生信息管理系统是一个用于管理学校中学生信息的软件系统。
该系统可以实现学生信息的录入、查询、修改和删除等功能,方便学校及相关管理人员对学生信息进行管理和统计分析。
1.2、项目目的本项目旨在设计一个高效、可靠的学生信息管理系统,通过合理的数据结构和算法设计,保证系统的性能和数据的完整性,提高学生信息管理的效率,减轻管理人员的工作负担。
2、系统需求分析2.1、功能需求2.1.1、学生信息录入学生信息录入功能允许用户输入学生的基本信息,包括学生姓名、学号、性别、年龄、班级等。
2.1.2、学生信息查询学生信息查询功能允许用户根据学号、姓名等关键字进行学生信息的查询,系统将显示符合条件的学生信息。
2.1.3、学生信息修改学生信息修改功能允许用户修改学生的基本信息,如姓名、性别、年龄、班级等。
2.1.4、学生信息删除学生信息删除功能允许用户删除学生的信息,系统将在删除前进行确认。
2.1.5、学生信息统计学生信息统计功能允许用户对学生信息进行统计分析,如按班级、年龄等条件进行统计,并将结果显示出来。
2.2、性能需求2.2.1、响应时间系统应保证在用户操作时的响应时间不超过3秒。
2.2.2、并发处理系统应支持多个用户同时操作,并能正确处理并发访问的情况。
2.2.3、数据准确性系统应保证学生信息的录入、修改和删除的准确性,防止数据错误或遗漏。
3、数据结构设计3.1、数据组织学生信息可以通过链表、数组、哈希表等数据结构进行存储和组织。
采用合适的数据结构可以提高操作效率和节省存储空间。
3.2、数据字段学生信息应包括学号、姓名、性别、年龄、班级等字段,每个字段应具有合适的数据类型和长度。
3.3、数据关系学生信息之间可以存在一对一、一对多等关系。
在设计数据结构时,应考虑好不同信息之间的关联和依赖关系,以便进行查询和统计分析。
4、系统模块设计4.1、学生信息录入模块学生信息录入模块负责接收用户输入的学生信息,并将其存储到系统中。
1需求分析1。
1 设计任务要求通讯录系统主要包含以下要求:(1)设计一个学生通讯录管理系统,每个学生数据信息包括:姓名、电话号码、qq、邮编和地址;(2)创建学生数据类型为结构体并以磁盘文件保存;(3)能读取磁盘文件并显示输出学生的相关信息;(4)能按姓名或电话等多种方式进行学生信息查询;(5)能查询、添加、修改和删除学生通讯录。
1。
2 系统功能需求分析系统主要包含以下主要功能:(1)查询通讯录记录;(2)添加通讯录记录;(3)修改通讯录记录;(4)删除通讯录记录;(5)关闭通讯录。
2 概要设计2。
1 数据类型本系统中所有变量都定义为字符串型,学生通讯录数据类型定义为结构体类型。
然而为了更加方便,添加了抽象数据类型类book,再私有继承了以结构体存储的学生数据。
2.2 主程序及各程序层次关系以下是系统功能模块关系图,主要包含查询、添加、修改、删除联系人和关闭系统等功能。
另外还提供了键盘式选择菜单实现功能选择.图2。
1 系统功能模块关系图查询联系人:可以选择用姓名和电话两种方式查询添加联系人:可以添加通讯录记录,依次输入姓名、电话、qq、邮编和地址修改联系人:输入欲修改联系人姓名后,再依次输入修改姓名、电话、qq、邮编和地址即可完成修改删除联系人:输入欲删除联系人的姓名后,会自动删除该联系人的记录内容关闭系统:选择相关操作进行系统正常关闭,保存有效数据记录3 详细设计3.1 实现数据类型(1)以字符串类型定义通讯录中学生数据信息变量:string name;//姓名string number;//电话号码string qq;//QQ号string post;//邮编string address;//地址(2)学生通讯录数据类型定义为结构体存储:struct inf{string name;//姓名string address;//地址string number;//电话号码string post;//邮编string qq;//QQ号}datatype;(3)实现类book私有继承结构体inf:class book:private inf{public:book(){};//默认构造函数int face();//首页void add_person();//添加联系人void del_person();//删除联系人void fix();//修改信息void find();//查询联系人void save_new();//保存新增加的联系人};3.2 实现各操作模块的功能(1)主函数的实现:int main(){ int choose; book b;while (choose = b。
学生通讯录管理系统数据结构课程设计一、需求分析在学生通讯录管理系统中,我们需要实现以下功能:1.学生信息的录入与管理2.通讯录信息的增删查改3.数据的持久化存储二、系统设计1. 数据结构设计为了实现学生通讯录管理系统的功能,我们需要设计以下数据结构:•学生信息结构体包括学号、姓名、性别、年龄等字段•通讯录信息结构体包括联系人姓名、电话号码、邮箱等字段2. 算法设计2.1 添加学生信息当用户选择添加学生信息时,系统会要求用户输入学号、姓名、性别、年龄等信息,然后将这些信息存储在学生信息的数据结构中。
void addStudentInfo() {// 读取用户输入的学生信息// 将学生信息存储在学生信息结构体中}2.2 修改通讯录信息用户可以根据联系人姓名查找通讯录信息,并进行修改操作,比如修改电话号码、邮箱等内容。
void modifyContactInfo() {// 根据联系人姓名查找通讯录信息// 用户进行修改操作}2.3 删除通讯录信息用户可以根据联系人姓名删除通讯录信息。
void deleteContactInfo() {// 根据联系人姓名删除通讯录信息}3. 数据存储设计为了持久化存储数据,我们可以选择使用文件存储或数据库存储。
在本系统中,我们选择文件存储的方式,数据以文本的形式存储在文件中。
三、系统实现通过以上设计,我们可以开始实现学生通讯录管理系统。
在实现过程中,我们需要注意保证数据结构的正确性和数据操作的合法性,从而确保系统的稳定性和可靠性。
四、总结通过本次数据结构课程设计,我们深入了解了学生通讯录管理系统的实现原理和功能设计。
在接下来的学习中,我们将继续努力提升自己的编程能力,不断完善系统的功能和性能,为实现更多复杂系统打下坚实的基础。
淮阴工学院数据结构课程设计报告选题名称:学生成绩管理系统系(院):数理学院专业:信息与计算科学班级:计科1102班姓名:徐连喜学号: 33指导教师:周海岩学年学期:2011 ~ 2012 学年第 1 学期 2012 年 06 月 06 日【摘要】21世纪,科学技术突飞猛进,经济知识和信息产业初见端倪,特别是信息技术和网络技术的讯速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。
学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。
本论文叙述到的学生成绩管理系统是用IIS+ASP网页编程+ACCESS数据库+DREAMWEAVER MX 2004+SQL查询语言实现的。
重点介绍了学生成绩管理系统的实现过程:包括系统分析,系统调查,功能设计,数据库设计,系统实现,系统测试和调试等。
本系统主要功能有查询学生成绩、单个添加学生成绩、批量添加学生成绩、删除学生成绩、管理页面和修改管理员密码等内容。
【关键词】成绩管理;成绩查询; C++目录中文摘要。
1 1绪论。
4选题背景。
5需求分析。
6 2总体设计。
7程序设计组成框图。
8模块功能说明。
9程序流程图。
10主要函数之间相互调用。
113 在设计过程中的感受。
12致谢。
13参考文献。
14附录:源程序清单。
151.绪论选题背景为了提高高校学生信息的管理效率,方便对学生信息进行管理、学校里面的学生和管理员方便去管理和查询学生信息,如再要进行查询,就得在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,怎么可以即时而方便的管理,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。
建立一个学生信息管理系统,使学生信息管理工作规范化,系统化,程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息是必须而且十分迫切的工作。
目录1、数据结构课程设计任务书 (1)1.1、题目 (1)1.2、要求 (1)2、总体设计 (1)2.1、功能模块设计 (1)2.2、所有功能模块的流程图 (2)3、详细设计 (6)3.1、程序中所采用的数据结构及存储结构的说明 (6)3.2、算法的设计思想 (7)3.3、成绩管理系统各种运算的性质变换 (7)4、调试与测试: (8)4.1、调试方法与步骤: (8)4.2、测试结果的分析与讨论: (8)4.3、测试过程中遇到的主要问题及采取的解决措施: (28)5、时间复杂度的分析: (28)6、源程序清单和执行结果 (29)7、C程序设计总结 (36)8、致谢 (36)9、参考文献 (36)1第页1、数据结构课程设计任务书1.1、题目成绩管理系统1.2、要求(1)将学号、姓名、各科成绩构建成结构体数组;(2)用menu_select函数创建成绩管理系统的菜单;(3)用switch函数实现菜单的选择;(4)用CreateList函数建立管理系统的链表(5)用PrintList函数输出链表信息;(6)用ListFind函数实现管理系统的信息查找;(7)用InsertNode函数实现管理系统新信息的插入;(8)用DelNode函数实现管理系统多余信息的删除;(9)用Sorting_order函数实现管理系统信息的排序;(10)用ChangeNode函数实现管理系统信息的修改;(11)用average函数实现管理系统中各科成绩求平均值;(12)用pass_rate函数实现管理系统中各科成绩的通过率;2、总体设计2.1、功能模块设计根据课程设计题目的功能要求,各个功能模块的组成框图如下:成绩管理系统菜单(选择0-9)1.成绩信息的输入2.成绩信息的查找3.成绩信息的插入4.成绩信息的删除5.成绩信息的修改6.成绩信息的排序7.成绩信息的输出8.各科成绩的平均分9.各科成绩的及格率0.退出管理系统122.2、所有功能模块的流程图 ynxz=1 xz=2否 是是 否成绩信息的输入输入学号﹑姓名、高数成绩、英语成绩和数据结构成绩flag=y||flag=n退出成绩信息的查找xz=1||xz=2按学号查找 按姓名查找输入要查找的学号 输入要查找的姓名p=0 p=0没查找到要查找的信息 退出没查找到要查找的信息退出3否 是yn成 绩 信 息 的 插 入成 绩 信 息 的 删 除 插入信息输入要插入信息 查找要删除的信息 是否找到没查找到要删除的信息 是否真的要删除该节点(y/n)删除该节点信息 不删除该节点信息4否 是xz=2 xz=1成 绩 信 息 的 插 修 改查找要修改的信息是否找到退出没查找到要修改的信息成 绩 信 息 的 排 序xz=1||xz=2按学号从小到大排序按姓名排序输出排序结果输出排序结果5否是是否成 绩 信 息 的 输 出p=0输出学号﹑姓名、高数成绩、英语成绩和数据结构成绩退出成 绩 信 息 的 平 均 分sum=sum+该学生的成绩判断是否还有学生的成绩没加总成绩除以总人数成绩信息的合格率判断该同学成绩是否大于sum60,sum++是pass++pass/sum3、详细设计模块功能说明:如函数功能、入口及出口参数说明,函数调用关系描述等;3.1、程序中所采用的数据结构及存储结构的说明以链表存储结构来表示成绩信息,则可得到各个学生的成绩信息形成的链表。
//-----------学生的成绩信息的链式存储表示-------------typedef struct{char num[10];char name[20];float score[3];}DataType;typedef struct node{DataType data;struct node *next;}ListNode,*LinkList;在此,data域中表示学号姓名各科成绩是以行序为主序链式排列的,这样有利于进行某些操作。
63.2、算法的设计思想(1)成绩信息的输入输入的新节点连接到节点之后;(2)成绩信息的查找遍历链表比较与输入的信息是否相符若相符输出,如不相同输出没查到;(3)成绩信息的插入将新输出的接点新鲜尾插法插入;(4)成绩信息的删除遍历链表比较与输入的信息是否相符若相符则删除,如不相同输出没查到;(5)成绩信息的修改遍历链表比较与输入的信息是否相符若相符则修改该学生的信息;(6)成绩信息的排序新建一头结点将该节点指向原链表头结点,再定义一个指针指向链表的第一个学生的信息,然后插入新建的头结点,然后指针后移,按一定的顺序依次插入,最后就得到一个有序的链表;(7)成绩信息的输出建立一个指针,遍历链表,将指针所指的学生的信息依次输出;(8)求各科成绩的平均分定义两个数,一个将各个学生的成绩加在一起,另一个计算总人数,最后再除以总人数,就得平均分;(9)各科成绩的及格率定义两个整数,依次遍历链表,若该学生的成绩及格则其中一个数加一,而另一个数不管该学生成绩是否及格都加一,则得到总人数,最后及格人数除以总人数就得及格率;3.3、成绩管理系统各种运算的性质变换(1)成绩信息的输入链表后接一个节点仍是链表;(2)成绩信息的查找查找后的链表没任何变化仍是一个链表;(3)成绩信息的插入插入一个节点后仍是链表;(4)成绩信息的删除删除一个节点后仍是链表;(5)成绩信息的修改修改信息后链表的结构没任何变化,只是将其中的信息修改了;(6)成绩信息的排序按一定的顺序排列之后仍是链表;(7)成绩信息的输出输出信息后链表的结构没任何变化,只是将其中的信息输出;(8)求各科成绩的平均分该操作只是将链表遍历了一遍,链表的结构没任何变化;(9)各科成绩的及格率该操作只是将链表遍历了一遍,链表的结构没任何变化;74、调试与测试:4.1、调试方法与步骤:第一步:测试成绩信息的输入输入几个学生的学号姓名各科成绩;第二步:测试成绩信息的查找按学号姓名各查找一次;第三步:测试成绩信息的插入插入一个新同学的信息,并输出插入后的学生的信息;第四步:测试成绩信息的删除分别按学号姓名删除已有同学和不存在的同学的信息,并输出删除后学生的信息;第五步:测试成绩信息的修改分别按学号姓名修改该同学信息,并输出修改后学生的信息;第六步:测试成绩信息的排序分别按学号姓名排序;第七步:测试成绩信息的输出输出已有学生的信息;第八步:测试各科成绩的平均分输出各科成绩的平均分;第九步:测试各科成绩的及格率输出各科成绩的及格率;第十步:测试退出管理系统4.2、测试结果的分析与讨论:8第一步:测试成绩信息的输入9第二步:测试成绩信息的查找首先按学号查找,输入不存在的学号,没找到,再找已存在的学号,输出查找结果:第三步:测试成绩信息的插入第四步:测试成绩信息的删除先按学号删除,输入不存在的学号,输出没找到,再输入存在的学号,在选择不删除,输出时没删除该学生的信息,在选择删除,输出是没有改学生的信息:再按姓名删除,输入不存在的姓名,输出没找到,再输入存在的姓名,再选择不删除,输出时没删除该学生的信息,再选择删除,输出是没有改学生的信息:第五步:测试成绩信息的修改首先按学号修改,输入不存在的学号,输出不存在,再输入存在的学号,修改,输出修改后的学生的信息:再按姓名修改,输入不存在的姓名,输出不存在,再输入存在的姓名,修改,输出修改后的学生的信息:第六步:测试成绩信息的排序首先按学号排序:再按姓名排序:第七步:测试成绩信息的输出第八步:测试各科成绩的平均分第九步:测试各科成绩的及格率第十步:测试退出管理系统4.3、测试过程中遇到的主要问题及采取的解决措施:1、编译环境出现问题----→换了台机子2、头文件不全,编译不通过--→补上3、单词输入错误,无法识别---→改正4、逻辑出现错误,检查调换了语句的位置5、思考利用switch函数简便了算法6.全角半角出现问题,编译不通过5、时间复杂度的分析:(1)成绩信息的输入由于是按尾插法输入,因此时间复杂度为O(1);(2)成绩信息的查找由于是遍历查找,因此时间复杂度为O(n);(3)成绩信息的插入由于插入时要遍历查找,因此时间复杂度为O(n);(5)成绩信息的删除由于删除时要遍历查找,因此时间复杂度为O(n);(5)成绩信息的修改由于修改时要遍历查找,因此时间复杂度为O(n);(6)成绩信息的排序由于排序时使用冒泡法,因此时间复杂度为O(n);(7)成绩信息的输出由于输出时要遍历整个链表,因此时间复杂度为O(n^2);(8)求各科成绩的平均分由于计算时要遍历整个链表,因此时间复杂度为O(n);(9)各科成绩的及格率由于计算时要遍历整个链表,因此时间复杂度为O(n);6、源程序清单和执行结果#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct{ //管理系统节点类型char num[10]; //学号char name[20]; //姓名float score[3]; //各科成绩}DataType;typedef struct node{ //节点类型定义DataType data; //节点数据域struct node *next; //节点指针域}ListNode,*LinkList;ListNode *p;LinkList head;int menu_select(); //函数说明LinkList CreateList(void);void PrintList(LinkList head);ListNode *ListFind(LinkList head);void InsertNode(LinkList head,ListNode *p);void DelNode(LinkList head);ListNode *Sorting_order(LinkList head);void ChangeNode(LinkList head);float average(LinkList head,int i);float pass_rate(LinkList head,int i);void main() //主函数{for(; ;){switch(menu_select()){case 1:printf("******************************\n");printf("* 成绩信息的输入*\n");printf("******************************\n");head=CreateList();break;case 2:printf("******************************\n");printf("* 成绩信息的查找*\n");printf("******************************\n");p=ListFind(head);if(p) {printf("学号\t姓名\t 高数\t 英语\t 数据结构\n");printf("------------------------------------------------------\n");printf("%s\t%s\t%5.1f\t%5.1f\t%5.1f\n",p->data.num,p->,p->data.score[0],p->data.score[1],p->data.score[2]);printf("------------------------------------------------------\n");}elseprintf("没查找到要查找的信息!\n");break;case 3:printf("******************************\n");printf("* 成绩信息的插入*\n");printf("******************************\n");printf("请顺序输入学号﹑姓名、高数成绩、英语成绩和数据结构成绩\n");printf("******************************\n");p=(ListNode*)malloc(sizeof(ListNode));scanf("%s%s%f%f%f",p->data.num,p->,&p->data.score[0],&p->data.score[1],&p->data.score[2]);InsertNode(head,p);break;case 4:printf("******************************\n");printf("* 成绩信息的删除*\n");printf("******************************\n");DelNode(head);break;case 5:printf("******************************\n");printf("* 成绩信息的修改*\n");printf("******************************\n");ChangeNode(head);break;case 6:printf("******************************\n");printf("* 成绩信息的排序*\n");printf("******************************\n");PrintList(Sorting_order(head));break;case 7:printf("******************************\n");printf("* 成绩信息的输出*\n");printf("******************************\n");PrintList(head);break;case 8:printf("******************************\n");printf("* 各科成绩的平均分*\n");printf("******************************\n");printf("高数成绩的平均分:%12.3f\n",average(head,0));printf("英语成绩的平均分:%12.3f\n",average(head,1));printf("数据结构成绩的平均分:%8.3f\n",average(head,2));break;case 9:printf("******************************\n");printf("* 各科成绩的及格率*\n");printf("******************************\n");printf("高数成绩的及格率:%10.2f%%\n",pass_rate(head,0));printf("英语成绩的及格率:%10.2f%%\n",pass_rate(head,1));printf("数据结构成绩的及格率:%6.2f%%\n",pass_rate(head,2));break;case 0:printf(" 非常感谢您的使用,谢谢!\n程序设计者:尚静楠\n 学号:11011045\n");return;}}}int menu_select() //菜单{int sn;printf(" 成绩管理系统\n");printf("﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦﹦=\n");printf(" 1. 成绩信息的输入\n");printf(" 2. 成绩信息的查找\n");printf(" 3. 成绩信息的插入\n");printf(" 4. 成绩信息的删除\n");printf(" 5. 成绩信息的修改\n");printf(" 6. 成绩信息的排序\n");printf(" 7. 成绩信息的输出\n");printf(" 8. 各科成绩的平均分\n");printf(" 9. 各科成绩的及格率\n");printf(" 0. 退出管理系统\n");printf("=========================\n");printf(" 请选择0-9:");for(; ;){scanf("%d",&sn);if(sn<0||sn>9)printf("\n 输入错误,重选0-9:");elsebreak;}return sn;}LinkList CreateList(void) //用尾插法建立管理系统链表函数{ //尾插法建立带头结点的管理系统链表算法LinkList head=(ListNode*)malloc(sizeof(ListNode)); //申请头结点ListNode *p,*rear;char flag='y'; //是否结束标志rear=head;while(flag=='y'||flag=='Y'){ p=(ListNode*)malloc(sizeof(ListNode)); //申请新节点printf("请顺序输入学号﹑姓名、高数成绩、英语成绩和数据结构成绩\n");printf("------------------------------------------------------\n");scanf("%s%s%f%f%f",p->data.num,p->,&p->data.score[0],&p->data.score[1],&p->data.score[2]);rear->next=p; //新节点连接到尾节点之后rear=p; //尾节点指向新结点printf("继续输入吗?(y/n):");getchar();scanf("%c",&flag); //读入一个标志数据}rear->next=NULL; //终端节点指针域置空return head; //返回链表头指针}void PrintList(LinkList head) //输出管理系统各个数据{ListNode *p;p=head->next;printf("学号\t姓名\t 高数\t 英语\t 数据结构\n");printf("------------------------------------------------------\n");while(p){printf("%s\t%s\t%5.1f\t%5.1f\t%5.1f\n",p->data.num,p->,p->data.score[0],p->data.score[1],p->data.score[2]);printf("------------------------------------------------------\n");p=p->next;}}ListNode *ListFind(LinkList head) //管理系统的查找函数{ListNode *p; char num[10];char name[20]; int xz;printf("==============\n");printf(" 1.按学号查找\n");printf(" 2.按姓名查找\n");printf("==============\n");printf(" 请选择:");p=head->next;scanf("%d",&xz);if(xz==1) { //按学号查找printf("请输入要查找者的学号:");scanf("%s",num);while(p && strcmp(p->data.num,num)!=0)p=p->next;}elseif(xz==2) {printf("请输入要查找者的姓名:"); //按成绩查找scanf("%s",name);while(p && strcmp(p->,name)!=0)p=p->next;}return p;}void InsertNode(LinkList head,ListNode *p) //管理系统的插入函数{ListNode *p1,*p2;p1=head; p2=p1->next;while(p2 && strcmp(p2->data.num,p->data.num)<0){p1=p2;p2=p2->next;}p1->next=p;p->next=p2;}void DelNode(LinkList head) //管理系统的删除函数{char jx;ListNode *p,*q;p=ListFind(head);if(p==NULL) {printf("没有查到要删除的信息!\n");return;}printf("真的要删除该节点吗?(y/n):");getchar();scanf("%c",&jx);if(jx=='y'||jx=='Y') {q=head;while(q && q->next!=p)q=q->next;q->next=p->next; //删除节点free(p); //释放被删除的节点空间printf("该学生的信息已被删除!\n");}}ListNode *Sorting_order(LinkList head) //管理系统的排序函数{ ListNode *p,*q; int xz;printf("==============\n");printf(" 1.按学号排序\n");printf(" 2.按姓名排序\n");printf("==============\n");printf(" 请选择:");scanf("%d",&xz);if(xz==1) { //按学号排序p=head->next->next;head->next->next=NULL;while(p) {q=p->next;InsertNode(head,p);p=q;}return head;}if(xz==2) { //按姓名排序p=head->next->next;head->next->next=NULL;while(p) {ListNode *p1,*p2;p1=head; p2=p1->next;q=p->next;while(p2 && strcmp(p2->,p->)<0){p1=p2;p2=p2->next;}p1->next=p;p->next=p2;p=q;}return head;}}void ChangeNode(LinkList head) //管理系统的信息的修改函数{ListNode *p;p=ListFind(head); //调用查找函数,找到要修改的信息的节点if(p) { //修改该节点printf("学号\t姓名\t 高数\t 英语\t 数据结构\n");printf("------------------------------------------------------\n");printf("%s\t%s\t%5.1f\t%5.1f\t%5.1f\n",p->data.num,p->,p->data.score[0],p->data.score[1],p->data.score[2]);printf("------------------------------------------------------\n");printf("请依次输入该学生的高数、英语、数据结构的成绩:");scanf("%f%f%f",&p->data.score[0],&p->data.score[1],&p->data.score[2]);}else //没找到该节点printf("没查到要查找的信息!\n");}float average(LinkList head,int i) //管理系统的求平均成绩的函数{float sum=0.0; int j=0;ListNode *p;p=head->next;while(p) {sum=sum+p->data.score[i];p=p->next; j++;}return(sum/j);}float pass_rate(LinkList head,int i) //各科成绩的通过率函数{double sum=0.0,pass=0;int PA=60;ListNode *p=head->next;while(p) {sum++;if(p->data.score[i]>=PA)pass++;p=p->next;}return(pass/sum*100);}}7、C程序设计总结本程序在刚开始调试时有许多错误,但在我的努力及同学的帮助下都被一一克服,现在在操作本程序时可根据提示进行相关操作,能正确输出结果。