数据结构课程设计(学生成绩管理系统)

合集下载

学生成绩管理系统(线性表版)

学生成绩管理系统(线性表版)

学年论文(数据结构 2015—2016 第一学期)题目: 数据结构课程设计作者:陈炳宏所在学院:信息科学与工程学院专业年级:信息安全14-1指导教师:刘淑娴职称:副教授2016年 1 月 4 日一.学生成绩管理系统 (1)1。

1需求分析 (1)1。

1.1程序分析: (1)1。

1.2执行方式: (1)1。

1.3 程序执行的命令包括: (1)1.1.4测试数据: (2)1.2概要设计 (2)1.2.1 线性表的抽象数据类型定义为: (3)1.2。

2 结点的抽象数据类型定义为: (3)1。

2。

3指针的抽象数据类型定义为: (3)1。

2.4本程序包含8个模块: (4)1。

3详细设计 (5)1.3.1 元素类型、结点类型和指针类型 (5)1.3.2 函数说明 (5)1。

3.3 功能函数 (5)1。

4 调试分析 (15)1.5 用户手册 (15)1。

6测试结果 (18)一.学生成绩管理系统1.1需求分析1.1。

1程序分析:本程序是一个基于线性表结构编写的学生成绩管理系统,学生可以进行包括学生信息建立、在不同位置插入学生信息、查询指定学生信息、删除指定学生信息和输出显示所有学生信息这五项功能,功能操作简单,效率高,可延展性强. 为保证信息的真实性,学生信息中学号长度num<=11,姓名长度name〈=8,性别gender<=3,成绩仍意输入,并且学号和成绩只能为数字,否则程序出错。

1。

1。

2执行方式:本程序以用户和计算机的对话方式执行,即在计算机终端上显示7个共能选择的“提示信息"之后,由用户在键盘上输入本程序中规定的功能指令;相应的输人数据(并能滤去输入中的非法字符)和显示信息来处理结果。

1.1.3 程序执行的命令包括:(1)学生信息链表的建立;建立后仍意建继续输入,n和N退出;(2)插入学生信息;输入插入的位置;(3) 查询学生信息;选择两种方式之一查找并查询;(4)删除学生信息;选择两种方式之一查找并删除;(5)修改学生信息;选择两种方式之一查找并修改;(6) 输出所有学生信息;(7)退出管理系统.1.1.4测试数据:(1)建立三个学生信息:学号(11)姓名(8)性别成绩20141305210,cc,n,8920141302399,sxz,w,9920151432596,sad,n,88(2) 插入一个学生信息:学号(11)姓名(8)性别成绩2016,scs,n,79输入插入位置:2(3) 查询学生信息:按1选择学号查询,输入学号:20141305210按2选择姓名查询,输入姓名:scz(4) 删除学生信息:按2选择姓名删除,输入姓名:cc(5)修改学生信息:按1选择学号修改,输入学号:20141302399输入修改后的数据:学号(11)姓名(8) 性别成绩20141312399,scz,w,691。

课程设计-学生成绩管理系统

课程设计-学生成绩管理系统

数据结构课程设计报告题目:学生成绩管理系统学生姓名:学号:班级:指导教师:课程设计评分表学生姓名:班级:学号:课程设计题目:学生成绩管理任务:本题对学生的某门课程成绩管理做一个简单的模拟,设计一个学生成绩管理系统。

假设学生信息包括:学号、姓名、性别,课程的成绩信息有平时成绩、实验成绩、期未成绩、总评成绩,总评成绩=平时成绩*0.4+实验成绩*0.3+期未成绩*0.3,用菜单选择方式完成下列功能:(1)登记学生成绩;(2)插入学生成绩;(3)修改学生成绩;(4)删除学生成绩;(5)查询学生成绩;(5)对学生成绩进行排序;(6)输出学生成绩。

在完成上术基本要求的操作后,要应用功能(6)进行测试。

一、设计思路二、设计说明与调试分析三、源程序代码四、测试结果五、设计心得六、参考文献一、设计思路本系统是一个学生成绩管理系统,输入数据类型主要是string等数据类型,输入内容包括:学生学号、姓名、平时成绩、实验成绩、期末成绩等数据。

用户在输入学生数据时要保证输入数据格式的正确性,系统不会自动检测输入的数据是否正确。

输出形式与输入形式类似,根据需要可以选择显示输入的各项内容,显示内容包括:学生学号、姓名、平时成绩、实验成绩、期末成绩,总评成绩。

用户运行程序后进入系统主界面在主界面用户可以输入所有学生的数据并保存到文件中,也可以读取文件中已有的学生数据。

本系统同时只能对一个数据文件进行相关操作。

当用户读取学生数据后可对其进行显示、文件尾增加、删除、查询、排序、修改等相关操作。

用户在操作过程中可随时对当前文件进行保存到文件操作,以防止修改的数据丢失。

二、设计说明与调试分析主要编写部分学生成绩管理系统学生成绩管理系统内,共有两个类,分别为学生类和管理类。

学生对象用vector容器来存放。

管理类共包含了7个不同的函数,而每一个函数是一个模块,并对它们具体编写,使之具有不同的功能,能实行相应的操作。

2.1 本程序中定义的类及其函数:1.Student 类class Student//定义一个Student类//{public:Student(string nu = "0", string na = "0", int ping = 0, int shi = 0, int qi = 0);void set_student(const string &Nu, const string &Na, int Ping, int Shi, int Qi);void set_pingshi(int ping) { pingshi = ping; }//类成员函数set_pingshi,设置平时成绩//void set_shiyan(int shi) {shiyan = shi; }//类成员函数set_shiyan,设置实验成绩//void set_qimo(int qi) { qimo = qi; } //类成员函数set_qimo,设置期末成绩//bool search(const string &num) { return number == num; }void display();//声明display显示函数//bool operator<(const Student&);//运算符重载//Student& swap(Student&);public:string number; //定义学生的学号//string name; //定义学生的姓名//int pingshi/*平时成绩*/,shiyan/*实验成绩*/, qimo/*期末成绩*/;};2. Manage 主要功能类class Manage//主要功能类//{private:vector <Student> stu;public:Manage() {}void Add(Student&s);//声明添加学生信息的函数//void Add2(Student&s);//声明登记学生信息的函数//void Chaxun(); //声明查询学生信息的函数//void Paixu();//声明将学生的成绩的平均数进行排序的函数//void Revise(); //声明修改学生信息的函数//void Delete(); //声明删除学生信息的函数//void Save(); //声明存储学生信息的函数//void Load(); //声明读取学生信息的函数//void Play(); //声明显示学生信息的函数//};2.2 管理类中各模块功能分析1、登记学生信息,登记大量学生信息包括增添学生的姓名、学号、平时成绩、实验成绩、期末成绩等用void Add2(Student&s)函数去实现。

数据结构课程设计学生信息管理系统

数据结构课程设计学生信息管理系统

数据结构课程设计学生信息管理系统学生信息管理系统是一种用于管理学生信息的软件系统。

它主要用于学校、教育机构或者其他组织中的学生信息管理工作。

该系统可以匡助学校或者教育机构高效地采集、存储和管理学生的个人信息、学籍信息、成绩信息等。

一、系统架构学生信息管理系统通常由前端界面、后端数据库和服务器组成。

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、主界面设计为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。

学生成绩管理系统课程设计报告c++

学生成绩管理系统课程设计报告c++

学生成绩管理系统课程设计报告前言一、系统的设计需求1、整个系统均用C语言实现;2、利用指针、链表来实现学生成绩的数据结构设计;3、系统具有输入、显示、删除、排序、退出基本功能;4、系统的各个功能模块都用函数的形式来实现;5、可以将学生信息全部显示出来出来。

二、系统的功能模块划分每一条记录包括一个学生的姓名、成绩。

同时1、输入功能:一次可以完成一个学生成绩记录的输入。

2、显示功能:完成全部学生记录的显示。

3、删除功能:对指定学生的成绩进行删除.4、排序功能:按学生从大到小进行排序。

5、修改功能:对学生的成绩进行修改。

三、系统的整体设计1。

数据结构设计:A、输入功能的设计:void insert_func(void){char s_temp[4];ptr=(struct student *) malloc(sizeof(struct student));printf(” Student name :");gets(ptr—〉name);// gets从标准输入设备读取字符串// printf(” Student score:");gets(s_temp);ptr->score = atoi(s_temp);//把字符串转化为整数//B、删除功能的设计:void delete_func(void)//现在进入删除操作//{char del_name[20];printf(" Delete student name:");gets(del_name);prev = head;current = head-〉next;while ((current != NULL)&& (strcmp(current-〉name , del_name)!=0))//用到了strcmp 比较字符串{prev = current;current = current->next;}if (current != NULL){prev—〉next = current—〉next;free(current);//释放当前位置//printf(" %s student record deleted\n”,del_name);//输出被删除的姓名//}elseprintf(” Student %s not found\n",del_name);//否则此学生不存在//C、排序功能的设计:void sort_func(void)//插入数据//{prev = head;//把头指针所指的值付给prev//current = head—〉next;//把头指针的下一个指针值付给当前指针所指的位置// while ((current != NULL)&&(current—〉score 〉ptr—〉score)){prev = current;current = current->next;}ptr-〉next = current;prev—〉next = ptr;D、修改功能的设计:void modify_func(void){char n_temp[20],s_temp[4];//定义字符类型//printf(” Modify student name:”);gets(n_temp);//这样输入姓名current=head—>next;while ((current != NULL)&& (strcmp(current->name , n_temp)!=0)){prev = current;current = current-〉next;}if (current != NULL){printf(” **************************\n");printf(” Student name :%s\n”,current-〉name);printf(” Student score:%d\n”,current—>score);printf(” **************************\n");printf(" Please enter new score:”);gets(s_temp);current—〉score = atoi(s_temp);printf(" %s student record modified\n”,n_temp);}//输出被修改的成绩//elseprintf(” Student %s not found\n”,n_temp);//否则此学生不存在//anykey_func();E、显示功能的设计:void display_func(void)//定义显示//{int count=0;system(”cls”);if(head—〉next == NULL)//如果头指针所指数为空//{printf(” No student record\n”);//则输出学生记录为空//}else//否则输出学生姓名和成绩//{printf(” NAME SCORE\n”);printf(” —--——--—————-—-—-——-—-——-——\n”);current=head->next;while(current != NULL){printf(” %-20s %3d\n", current—〉name, current—〉score);count++;current=current—〉next;if(count % 20 == 0)getch();}printf(” --——————-—————————--—-—-—--\n”);printf(" Total %d record(s) found\n”, count);2.功能模块的具体设计整个系统除了主函数外,另外还有8个函数,实现5大功能:输入功能、显示功能、排序功能、删除功能、修改功能。

数据结构课程设计-学生成绩管理系统

数据结构课程设计-学生成绩管理系统

广东学院《数据结构课程设计》题目:学生成绩管理系统学号:姓名:年级:计算机科学与技术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单链表的定义先定义单链表结点的数据域,数据域包括学生姓名、学生学号、学生成绩等学生信息,然后再定义链表结点,链表结点包括结点数据域和结点链域,最后再定义指向链表结点的指针。

数据结构课程设计学生管理系统

数据结构课程设计学生管理系统

#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、增加学生成绩记录;2、显示学生成绩;3、学生成绩排行;4、查找学生成绩;5、删除学生成绩;6、插入学生成绩;7、清空所有数据;8、安全退出系统;需求说明:学生成绩包括:学号,姓名,语文,数学,英语,总分;录入的学生成绩要求用文件形式保存,并可以对其进行输入、浏览、查询、修改、删除等基本操作;学生成绩的显式要求有一定的规范格式;对学生成绩应能够分别按姓名和学号两种方式进行,要求能返回所有符合条件的学生的成绩;对学生成绩的修改应逐个地进行,一个学生成绩的更改不应影响其他的学生记录;所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况总体设计编写目的:根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案并写出书面文档总体设计说明书,为下一步进行详细设计做准备.总体设计:1. 该系统可以按功能进行模块划分,其模块图如下:帐号学生成学生基本成绩查询管理员绩管理系统密码学生成绩管理系统模块图其中:成绩输入模块完成学生成绩的输入功能,输入成绩包括学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等;成绩浏览模块完成已录入学生成绩的显示; 成绩查询模块完成学生成绩的查询,查询时对应有按姓名查询和按学号查询两种方式;成绩修改模块完成学生成绩的修改功能;成绩删除模块完成学生成绩的删除功能;菜单选择模块完成用户命令的接收,此模块也是学生成绩管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能;2. 数据结构学生成绩包括:学号,姓名,语文,本系统中主要的数据结构就是学生的成绩, 数学,英语,总分;在处理过程中各项可以作为一个学生的不同属性来进行处理 3。

(顺序表)学生成绩管理系统

(顺序表)学生成绩管理系统
如下图2-0所示
图2-0
(9)SaveFile()保存函数,对所有操作产生的变化进行文件保存
图2-1
六、调试与测试
(1)在主函数调用各个功能模块函数,对各个函数进行测试。
(2)OpenList()
在主函数中对线性表初始化并用malloc函数分配空间,随后调用文件读取函数,进行读取,若有错误操作则会显示退出程序。在此系统操作中于我而言的难点首先是如果给线性表分配空间的问题,在起初未分配完空间,连读取文本文件都是十分困难,更何谈后面的步骤,但是经过我多方面专研,并不断尝试使用malloc函数,最终完善此功能并予以实现
④删除操作:在此操作中,首先输入需要删除的学生数据,然后进行位置i的定位,选择删除,然后选择是否继续操作,并显示所有信息。
⑤更新操作:根据第二步的查找操作选择,共有5种查找方式,随后找到该条学生记录,随后任选所要更改的学生9类数据中的数据,并选择是否继续或退出程序
⑥排序操作:根据总分采用直接插入排序、选择排序、冒泡排序和编号顺序排序等排序算法对学生进行排序。
《算法与数据结构课程设计》报告
课 设题 目
学生成绩管理系统
学院
班 级
学 生 姓 名
学 号
序 号
指 导 教 师
时 间
2019.1.12
一、课程设计的目的
(1)进一步熟悉VC++或其他开发环境,熟悉用C或其他语言完成一个应用程序的设计过程,掌握有关编辑、调试和整合程序的方法和技巧。
(2)通过此设计,了解《算法与数据结构》课程中线性表、图的逻辑结构和物理结构,各种排序算法的过程和算法的实现;掌握有关线性表、图在不同存储形式下各种操作的实现,以及各种排序算法的实现;体会数据结构在解决现实问题中的作用和重要性。

学生成绩管理系统+++数据结构课程设计

学生成绩管理系统+++数据结构课程设计

2008-2009学年度第二学期赣南师范学院数学与计算机科学学院《算法与数据结构课程设计》综合实验课程设计名称:学生成绩管理系统专业:计算机科学与技术班级:07计本(1)班学号:070703032 姓名:杨倍平指导教师:曾春梅老师学生成绩管理系统一、问题的描述和分析1.1问题的描述随着社会的发展和经济时代的到来,管理信息系统在各行各业都越来越重要,特别是教育事业。

在经济发达的国家,许多教育机构(如公办、私立、培训机构等),都投入了大量的资金开发MIS系统,以求在将来激烈的竞争中立于不败之地。

在我国,民办教育是新兴的一个行业,是随着改革开放和市场经济的发展根据中国特有的国情发展起来的,特别是中国民办教育促进法的出台,从一定的程度上规范和促进了中国民办教育的发展,这是一个很有发展前途的新兴产业,但是同发达国家相比,我国的民办教育行业的信息技术的应用程度还很低,只有在大城市中发展较早、规模较大的民办院校中才使用计算机进行大规模操作,从各方面提高工作效率,取得良好的社会和经济效益,而一些新兴的、规模较小的民办机构还没有全部具备这种功能。

因此可见,随着我国民办教育的迅速发展,信息技术在其上的应用会更加地广泛和深入。

1.2现有系统存在问题的分析有的学校根本就没有系统,还是手工操作计算机日新月异的发展,但是有的领导只见眼前利益,不关心,甚至不敢尝试新兴的事物。

手工操作还十分落后,效率极低,成本很大,以后的社会是信息的社会,信息只有快,准,精才能发挥其价值。

所以机器代替人力是必然的历史发展趋势,只有领导的重视和支持才能从人工操作改为计算机的自动化系统。

人工操作必将被计算机代替。

有些学校虽使用了计算机,甚至管理系统,但是仍然存在很多问题,问题一日不解决,效率就一日提不上去。

还有,有的系统很不完善到处是漏洞,可以说是千疮百孔,这样极不完善的系统能有保障吗?所以制作一个完善的学生管理系统是必不可少的。

二、数据结构的设计struct person{char name[20];long num;float math;float English;float chinese;float average;float sum;}student;三、模块:学生成绩管理系统模块四、算法的设计1.在此成绩管理系统中,要求用户输入的只是有字符型和数值型数据,所以我设计了下面函数来处理并对输出的数据进行检验。

数据结构课程设计---学分管理系统

数据结构课程设计---学分管理系统

2015-2016学年第一学期《数据结构程序设计》课程设计报告题目:学分管理系统专业:计算机科学与技术班级:14级(2)班**:**指导教师:***成绩:计算机学院2015年12月1日目录1 需求分析..................................................... (2)2 总体设计..................................................... (3)3 详细设计..................................................... (4)4 小结..................................................... . (10)致谢..................................................... .. (10)参考文献..................................................... (10)源代码..................................................... . (11)1 需求分析学生学分管理系统是运行于计算机系统下的应用软件,主要用于对学生的学号、姓名以及各项学科学分进行录入、删除、修改、查询、排序、统计、存盘等操作,为学校的教师和学生提供了一个对学生学分进行管理和查看的平台,给用户提供了一个简单友好的用户接口,主要任务如下:1.1查看所有学生信息根据菜单提示,选择该功能,能够逐条显示全部学生学分记录1.2输入学生记录用户根据菜单提示选择输入学生记录选项,进行有关学生的学号、姓名、班级、基础课学分、专业课学分、选修课学分、人文类课学分以及实验课学分的录入。

可一次性输入多条学生的学分信息记录。

1.3删除学生记录根据提示,用户输入要进行删除学生的学号,如果在不存在该学号,则显示没有找到该学生;如果在文件中有该学号的信息存在,则将该学号所对应的姓名、学号、班级、各科学分等在对应文件中加以删除。

学生成绩管理系统说明书

学生成绩管理系统说明书

唐山学院数据结构课程设计题目学生成绩管理系统设计与实现系(部) 计算机科学与技术系班级11计本1班姓名尹云学号4112006102指导教师张小松2013 年1 月 4 日至 1 月11 日共 2 周2013 年1 月11 日数据结构课程设计任务书课程设计成绩评定表1引言学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要。

为了提高学校管理员和学生管理和查询学生成绩的效率,需要建立一个学生成绩管理系统,使我们可以在众多的学生信息中查找自己的成绩信息,面对学院大量的学生信息,学生只要登录本系统就可以查找到自己的成绩信息,而管理员也方便去管理每学期的学生的成绩信息。

学生成绩管理系统,使学生成绩信息管理工作规范化、系统化、程序化,避免学生管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改学生信息。

学生成绩管理系统有效地管理学生成绩相关信息,包括学生成绩的查询、录入、排序、统计等功能。

该系统为用户提供了一个简单的人机界面,用户可以根据提示信息进行各种操作。

本次设计使用的编程语言是C语言。

2问题分析根据设计题目要求分析如下:(1)本题目主要涉及顺序表的基本操作。

(2)在学生成绩管理系统中,录入学生信息时通常按录入顺序的先后,因此选用线性表。

在查找学生信息时,是在大量无序的学生信息中,通过比较所给关键字与对应信息项,找到所要查找的学生信息。

修改学生信息是在查找的基础上完成的,首先要找到需要修改的信息项,用输入的新数据覆盖原来的老数据,达到修改的目的。

删除学生信息也是在查找的基础上完成的,先找到要删除的学生信息,从要删除的那个信息项开始,用后一个信息项覆盖它,一直循环到最后,即可完成删除。

在查询不及格的学生信息时,只要把符合不及格的学生信息输出即可做到查询。

在统计不同等级的学生人数时,是想要根据划分的不同等级,将所有学生信息分成符合条件的几个部分。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计学生成绩管理系统是一个用于管理学生学习成绩的软件系统。

它通常用于学校、教育机构或教师们来跟踪和记录学生的学习进展,并生成报告和分析数据。

在数据结构课程设计中,学生成绩管理系统需要设计合适的数据结构来存储和操作学生成绩数据。

在设计学生成绩管理系统时,可以使用以下数据结构:1. 数组:可以使用数组来存储学生成绩数据。

每个学生的成绩可以用一个数组元素表示,可以将学生按照学号或者其他标识符按顺序存储在数组中。

这样可以方便地通过索引来访问和修改学生成绩。

2. 链表:链表是另一种常用的数据结构,可以用于存储学生成绩数据。

每个学生的成绩可以用一个节点表示,节点可以包含学生的信息和成绩,同时包含指向下一个节点的指针。

这样可以方便地插入、删除和查找学生成绩。

3. 树:树可以用于组织学生成绩数据。

可以使用二叉搜索树或平衡二叉树来存储学生成绩,其中学生的学号或者姓名可以作为关键字。

这样可以方便地进行查找、插入和删除操作,并可支持对学生成绩进行排序。

以上是一些常用的数据结构,用于存储学生成绩管理系统的数据。

在具体的设计中,还可以根据实际需求选择其他合适的数据结构。

除了数据结构,学生成绩管理系统还可能包括其他功能,例如:1. 添加学生:可以通过输入学生的基本信息和成绩,将学生添加到系统中。

2. 删除学生:可以通过学生的学号或其他标识符,从系统中删除某个学生的信息和成绩。

3. 修改成绩:可以根据学生的学号或其他标识符,修改学生的成绩信息。

4. 查询成绩:可以根据学号、姓名或其他条件,查询学生的成绩信息。

5. 成绩统计和分析:可以对学生的成绩进行统计和分析,生成报告和图表,帮助教师或学校了解学生的学习情况。

以上只是学生成绩管理系统可能包含的一些基本功能,具体的设计和实现还需要根据实际需求和要求进行进一步的扩展和深入分析。

通过合适的数据结构和功能设计,可以实现一个高效、易用和功能完善的学生成绩管理系统。

学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告

学生成绩管理系统课程设计报告一、课程设计题目基本要求本次课程设计的题目是学生成绩管理系统,要求实现以下功能: 1. 学生成绩录入:学生成绩管理系统应允许用户输入学生的学号、姓名、三门课的成绩以及平均成绩。

2. 学生成绩查询:学生成绩管理系统应允许用户按学号、姓名、以及单科成绩查询学生的成绩记录。

3. 学生成绩统计:学生成绩管理系统应允许用户按学号、姓名、以及平均成绩进行统计,并输出统计结果。

4. 学生成绩排序:学生成绩管理系统应允许用户按三科平均成绩、单科成绩、学号进行排序,并输出排序结果。

5. 退出系统:学生成绩管理系统应提供退出系统的选项,用户选择退出后,应退出系统。

二、设计要求1. 使用结构体数组实现学生成绩管理系统的数据结构。

2. 使用函数、指针、算法、流程结构及文件等综合应用实现学生成绩管理系统的各项功能。

3. 实现学生成绩管理系统的界面设计,包括菜单、表格、单选框、复选框、下拉框等控件的使用。

4. 使用数据库技术实现学生成绩管理系统的数据存储功能。

5. 实现学生成绩管理系统的测试流程,包括测试用例的设计和测试。

三、数据结构设计描述1. 数据字典数据字典是学生成绩管理系统的数据结构描述,包括以下数据流条目和数据存储条目:数据流条目:- 全部记录:最新更新后所有关于学生成绩的记录。

- 学生成绩记录:存放学生所有可供查询的信息。

数据存储条目:- 学生成绩记录:存放学生所有可供查询的信息,以索引文件的形式组织。

2. 数据结构学生成绩管理系统的数据结构包括以下结构体:- struct student:定义学生结构体,包括学号、姓名、三门课的成绩以及平均成绩。

- struct record:定义成绩记录结构体,包括学号、姓名、三门课的成绩以及平均成绩。

- struct database:定义数据库结构体,包括学生成绩记录数组,以及查询、统计、排序等函数。

四、系统功能描述1. 菜单设计学生成绩管理系统应提供以下菜单:- 成绩录入- 成绩查询- 成绩统计- 成绩排序- 退出系统2. 功能实现学生成绩管理系统的各项功能应分别实现如下:- 成绩录入:实现学生成绩的录入功能。

数据结构课程设计——成绩管理系统

数据结构课程设计——成绩管理系统

数据结构课程设计(1)学生成绩管理问题(建议数据结构:单链表)学生成绩管理是学校教务管理的重要组成部分,其处理信息量很大,本设计是对学生的成绩管理做一个简单的模拟,用菜单选择操作方式完成下列主要功能:(1)登记学生成绩;(2)查询学生成绩;(3)插入学生成绩;(4)删除学生成绩;要求对每个功能分别用函数实现。

(2)学生成绩管理系统需求与功能分析学生成绩的录入、统计、查询、修改、删除、输出。

画出功能结构图。

(3)学生成绩管理系统的数据结构表序号成员名(字段名)数据类型长度字段含义1 class_0 char 20 班级2 num int 学号3 name char 8 姓名4 elec flaot 电子技术5 c_prog float C 程序设计6 media flaot 多媒体技术7 eng float 大学英语8 math float 高等数学9 sport float 大学体育10 polity float 马克思主义政治经济学11 ave float 平均成绩12 order int 名次(4)学生成绩管理系统测试数据表class_0 num name elec c_prog media eng math sport polity ave order网络30331 3033101 办公费80 70 60 70 70 60 80 表中其余数据自己编造。

(5)使用链表编写程序(手写源程序代码,并给出注解)0)定义链表结点1)主函数main():定义链表头指针,调用录入、统计等函数对成绩表进行处理;2)建立链表函数Create():输入班级到政治课成绩信息;3)统计函数Statistic():计算平均成绩;4)查询函数Lookup():查询指定学号学生成绩记录;5)修改函数Modify():修改指定学号学生成绩记录;6)删除函数删除():删除指定学号学生记录;7)输出函数Output():输出班级所有学生成绩记录;8)插入函数Insert():按平均分顺序插入新结点。

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计

学生成绩管理系统数据结构课程设计近年来,随着信息技术的快速发展,学生成绩管理系统在学校中得到了广泛应用。

学生成绩管理系统是一种基于数据结构的软件系统,旨在帮助学校更好地管理学生的学习成绩。

本文将介绍一个基于数据结构的学生成绩管理系统的设计。

首先,我们需要设计一个合适的数据结构来存储学生的学习成绩。

在这个系统中,我们可以使用一个二维数组来存储学生的成绩信息。

数组的行表示学生的学号,列表示不同科目的成绩。

这样,我们就可以方便地对学生成绩进行增删改查的操作。

接下来,我们需要设计一些基本的功能来实现学生成绩的管理。

首先是添加学生的成绩信息。

当学生入学时,管理员可以通过系统将学生的学号和成绩添加到数组中。

其次是删除学生的成绩信息。

当学生毕业或者转学时,管理员可以通过系统将学生的学号和成绩从数组中删除。

再次是修改学生的成绩信息。

当学生的成绩发生变化时,管理员可以通过系统修改学生的成绩。

最后是查询学生的成绩信息。

管理员可以通过系统查询学生的学号,然后系统会返回该学生的成绩信息。

除了基本的功能,我们还可以设计一些高级功能来提升学生成绩管理系统的实用性。

例如,我们可以设计一个成绩统计功能,用于统计学生的平均成绩、最高成绩和最低成绩。

这样,管理员可以更好地了解学生的学习情况。

另外,我们还可以设计一个成绩排名功能,用于按照成绩对学生进行排名。

这样,管理员可以更方便地找出成绩优秀的学生。

在实际应用中,我们还可以将学生成绩管理系统与其他系统进行集成。

例如,我们可以将学生成绩管理系统与学生信息管理系统进行集成,这样可以更方便地管理学生的学习情况。

另外,我们还可以将学生成绩管理系统与家长端进行集成,这样家长可以通过系统查看孩子的成绩情况,及时了解孩子的学习进展。

总之,学生成绩管理系统是一种基于数据结构的软件系统,可以帮助学校更好地管理学生的学习成绩。

通过合适的数据结构和功能设计,我们可以方便地对学生成绩进行增删改查的操作,并且可以提供一些高级功能来提升系统的实用性。

原创python学生成绩管理系统课程设计报告

原创python学生成绩管理系统课程设计报告

原创Python学生成绩管理系统课程设计报告一、项目背景随着教育信息化的发展,学生成绩管理系统在学校教学管理中起到了重要的作用。

学生成绩管理系统可以方便、高效地记录和管理学生的各类成绩信息,提供成绩查询、统计和分析功能,帮助教师和学校进行教学管理和评估。

本课程设计的目标是设计和实现一个基于Python的学生成绩管理系统,实现学生信息的录入、成绩的录入、查询、统计和分析等功能。

二、项目概述本项目主要包括以下模块:1.学生信息管理模块:录入学生基本信息,包括学号、姓名、性别、年龄和班级等。

2.成绩录入模块:录入学生的各科成绩,包括语文、数学、英语和物理等科目。

3.成绩查询模块:根据学号查询学生的成绩信息,并显示在界面上。

4.成绩统计模块:统计每个学生的总成绩和平均成绩,并按班级进行排名。

5.成绩分析模块:根据学生的成绩信息,进行成绩分析,如查找平均成绩最高的学生和各科成绩最高的学生等。

三、系统设计1. 数据结构设计本系统主要使用以下数据结构来存储和管理学生信息和成绩信息:•学生信息:使用字典来表示,每个学生用一个字典来存储其学号、姓名、性别、年龄和班级等信息。

•成绩信息:使用嵌套字典来表示,每个学生的成绩用一个字典来存储,包括语文、数学、英语和物理等科目。

2. 界面设计本系统采用命令行界面来实现,使用Python的input函数和print函数来获取用户的输入和显示信息。

通过字典和列表等数据结构来实现界面的交互。

3. 模块设计与实现3.1 学生信息管理模块•添加学生信息:通过用户输入学号、姓名、性别、年龄和班级来创建一个学生信息字典,并将其添加到学生信息列表中。

•修改学生信息:根据学号查询学生信息,然后根据用户输入修改学生的姓名、性别、年龄和班级等信息。

•删除学生信息:根据学号查询学生信息,并将其从学生信息列表中删除。

3.2 成绩录入模块•录入成绩:根据学号查询学生信息,然后通过用户输入语文、数学、英语和物理等科目的成绩来录入学生的成绩信息。

学生成绩管理系统数据结构课程设计报告

学生成绩管理系统数据结构课程设计报告

学生成绩管理系统数据结构课程设计报告一、背景学生成绩管理系统是学校教务处常用的软件之一,旨在方便学校管理学生成绩信息。

数据结构是计算机科学中的基础课程,对于学生成绩管理系统的设计和实现有着重要意义。

本课程设计报告将针对学生成绩管理系统的数据结构设计展开讨论。

二、需求分析学生成绩管理系统需要存储学生的基本信息和成绩信息,可以进行成绩录入、查询、统计等操作。

系统需要能够高效地处理大量学生信息,并提供快速、准确的查询功能。

三、数据结构设计1. 学生信息存储为了高效地存储学生信息,可以使用链表数据结构。

每个学生信息包括学号、姓名、性别、班级等字段,可以设计一个学生结构体来存储这些信息。

链表节点可以包含一个学生结构体和指向下一个节点的指针,从而构成一个链表来存储所有学生信息。

typedef struct Student {int studentID;char name[50];char gender;char className[50];float score;struct Student* next;} Student;Student* head = NULL;2. 成绩信息存储成绩信息可以存储在一个数组中,数组的每个元素对应一个学生的成绩,可以通过学号索引到对应的成绩信息。

为了方便查询和统计,可以对成绩数组进行排序,例如按学号或成绩值排序。

float scores[1000];四、功能实现1. 成绩录入在管理系统中,可以提供成绩录入功能,输入学生的学号和成绩信息后,将成绩信息存储到成绩数组中。

2. 查询功能查询功能可以根据学生的学号或姓名查询学生的基本信息和成绩信息,可以使用链表和数组的结合来实现高效的查询功能。

3. 成绩统计系统可以根据输入的条件,如班级、科目等进行成绩统计,计算平均成绩、最高分、最低分等统计信息。

五、总结本设计报告对学生成绩管理系统的数据结构设计进行了详细讨论,包括学生信息和成绩信息的存储方式、功能实现等方面。

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计

学生成绩管理系统c语言课程设计一、引言学生成绩管理系统是一种可以帮助学校或教育机构管理学生的成绩、课程和考试信息的软件。

本文将介绍一个基于C语言的学生成绩管理系统的设计过程。

二、需求分析在设计一个学生成绩管理系统之前,我们需要先进行需求分析。

以下是该系统需要满足的基本需求:1. 学生信息管理:包括添加、删除和修改学生信息,如姓名、性别、年龄等;2. 课程信息管理:包括添加、删除和修改课程信息,如课程名称、授课教师等;3. 成绩录入:可以录入每个学生在每门课程中的成绩;4. 成绩查询:可以查询某个学生在某门课程中的成绩以及某门课程所有学生的成绩排名等;5. 成绩统计:可以统计某个班级或某门课程所有学生的平均分、最高分和最低分等。

三、系统设计1. 数据结构设计为了实现上述需求,我们需要定义一些数据结构来存储相关信息。

以下是我们所定义的数据结构:(1)Student结构体:用于存储每个学生的基本信息,包括姓名、性别、年龄等。

typedef struct {char name[20];char sex[10];int age;} Student;(2)Course结构体:用于存储每门课程的基本信息,包括课程名称、授课教师等。

typedef struct {char name[20];char teacher[20];} Course;(3)Score结构体:用于存储每个学生在每门课程中的成绩。

typedef struct {int student_id;int course_id;float score;} Score;(4)Class结构体:用于存储某个班级的所有学生和所选的所有课程。

typedef struct {Student students[MAX_STUDENT_NUM];int student_num;Course courses[MAX_COURSE_NUM];int course_num;} Class;2. 功能实现在上述数据结构定义完成之后,我们可以开始实现各个功能模块。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录一、运行环境 0一、运行环境 (1)二、设计目的和意义 (1)2.1设计目的 (1)2.2设计意义 (1)三、算法思想 (1)四、模块划分 (4)五、数据结构 (5)六、程序流程图 (6)七、程序源代码 (8)八、程序调试过程分析 (18)九、测试数据 (18)十、测试结果及分析 (19)十一、小结 (23)参考文献 (24)一、运行环境硬件环境:电脑软件环境:vc++6.0二、设计目的和意义2.1设计目的此次课程设计的目的是让学生在学习完C、数据结构等课程基础上,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

2.2设计意义此次设计意义在于让我们更好的去掌握C的基本语法、函数以及Visual C++集成编译环境。

掌握树、图、链表等基本数据结构及其应用。

掌握程序流程以及基本应用方法。

应用软件工程方面的知识,熟悉软件开发的流程。

通过本课程设计,培养学生进行软件设计能力。

首先进行需求分析,针对目标对象完成程序结构设计、对象设计、主要数据结构设计、输入输出设计、人机界面设计等。

三、算法思想整个系统除了主函数外,另外还有12个函数,实现十大功能:菜单选择、输入功能、显示功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改。

各个函数的详细设计说明分别如下:1、主函数 main()利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。

2、初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。

比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3、菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。

等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4、输入记录函数 STUDENT *create()这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。

算法:先声明一个首节点head,并将head->next设为NULL。

每输入一个数据就声明一个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。

5、显示记录函数 void print(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。

算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。

然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。

重复执行此步聚直到p指针指向NULL为止。

6、查找记录函数 void search(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,实现按姓名对某个学生进行查找,并显示所查找到的记录。

算法:采用线性查找法往下一个节点查找。

输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s) && p != NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。

7、删除记录函数 STUDENT *delete(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。

算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。

如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。

8、排序函数 STUDENT *sort(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。

9、修改函数 STUDENT *xiugai(STUDENT *head)这是一个有参数函数,形参为“链表头的指针”,首先按学生姓名对要修改的学生记录进行查找,然后对找到的记录进行修改。

算法:采用线性查找法往下一个节点查找。

输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s) && p != NULL时,使p后移一个结点,如果p!=NULL,修改p所指的结点的相关记录,修改完成后对记录进行输出,然后重新调用排序sort函数,对新修改的数据进行排序。

10、插入函数 STUDENT *insert(STUDENT *head,STUDENT *new)这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。

算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。

先用指针变量p0指向待插入的结点,p1指向第一个结点。

如果p0->average<p1->average,则待插入的结点不应插在p1所指的结点之前。

此时将p1后移,并使p2指向刚才p1所指的结点。

重复以上的步骤,直到p0->average>=p1->average为止。

这时将p0指向的结点插到p1所指结点之前。

但是如果p1所指的已是表尾结点,则p1就不应后移了。

如果p0->average比所有结点的average都小,则应将p0所指的结点插到链表末尾。

如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2->,使p2->next指向待插入的结点,然后将p1的值赋给p0->next,使得p0->next指向p1指向的变量。

如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0->next。

如果要插到表尾之后,应将p0赋给p1->next,NULL赋给p0->next。

最后再调用排序的函数,将学生成绩重新排序.11、保存数据到文件函数 void save(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。

12、从文件读数据函数 STUDENT *load()这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。

四、模块划分学生成绩管理的设计,除了主函数和初始化函数外,主要还设计了十个功能函数:菜单选择、输入功能、输出功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改函数。

通过分组设计现实现部分功能函数说明如下:1、菜单选择:int menu_select();提供十种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。

2、输入功能:STUDENT *create();通过一个for循环语句的控制,可以一次完成无数条记录的输入。

并将其存入链表。

3、输出功能:void print(STUDENT *head);通过一个while的循环控制语句,在指针p!=0时,完成全部学生记录的显示。

知道不满足循环语句,程序再次回到菜单选择功能界面。

4、查找功能:void search(STUDENT *head);通过strcmp来判断是否找到所需查找的学生记录,在不满足该条件时,通过while语句完成结点的下移,最后若查找成功则完成显示。

返回主菜单界面。

5、删除功能: STUDENT *Delete(STUDENT *head);按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。

6、修改功能:STUDENT *xiugai(STUDENT *head);首先通过想核对想要修改的学生姓名进行查到,相当于调用一次查找函数search,如果查找成功则对数据进行修改,最后计算其总分和平均分,调用一次排序函数sort,重新进行排序,并重新存储记录。

五、数据结构定义了一个typedef struct stu 的结构体数组,相关描述如下:#define LEN sizeof(STUDENT)typedef struct stu /*定义结构体数组用于缓存数据*/{char num[6];char name[20];int score[3];int sum;float average;int order;struct stu *next;}STUDENT;六、程序流程图6.1、程序的总体模块流程图如下:图6-16.2、删除学生记录流程图如下:图6-26.3、插入学生记录流程图如下:图6-3七、程序源代码#include <stdio.h>#include<dos.h>#include<stdlib.h> /*其它说明*/#include<string.h> /*字符串函数*/#include<ctype.h> /*字符操作函数*/#define LEN sizeof(STUDENT)typedef struct stu /*定义结构体数组用于缓存数据*/{char num[6];char name[20];int score[3];int sum;float average;int order;struct stu *next;}STUDENT;/*函数原型*/STUDENT *init(); /*初始化函数*/int menu_select(); /*菜单函数*/STUDENT *create(); /*创建链表*/void print(STUDENT *head); /* 显示全部记录*/void search(STUDENT *head); /*查找记录*/STUDENT *Delete(STUDENT *head); /*删除记录*/STUDENT *sort(STUDENT *head); /*排序*/STUDENT *insert(STUDENT *head,STUDENT *New); /*插入记录*/STUDENT *xiugai(STUDENT *head); /*修改记录*/void save(STUDENT *head); /*保存文件*/STUDENT *load(); /*读文件*//*主函数界面*/void main(){STUDENT *head,New;head=init(); /*链表初始化,使head的值为NULL*/for(;;) /*循环无限次*/{switch(menu_select()){case 1:head=create();break;case 2:print(head);break;case 3:search(head);break;case 4:head=Delete(head);break;case 5:head=sort(head);break;case 6:head=insert(head,&New);break; /*&new表示返回地址*/ case 7:save(head);break;case 8:head=load(); break;case 9:xiugai(head);break;case 10:exit(0); /*如菜单返回值为9则程序结束*/ }}}/*初始化函数*/STUDENT *init(){return NULL; /*返回空指针*/}/*菜单选择函数*/menu_select(){int n;printf("****************************************************\n");printf("\t\t Welcome to\n");printf("\n\t\t The student score manage system\n");printf("********************MENU**************************\n");printf("\t\t\t1. 输入学生记录\n"); /*输入学生成绩记录*/ printf("\t\t\t2. 输出学生记录\n"); /*显示*/printf("\t\t\t3. 查找学生记录\n"); /*寻找*/printf("\t\t\t4. 删除学生记录\n"); /*删除*/printf("\t\t\t5. 将学生成绩进行排序\n"); /*排序*/printf("\t\t\t6. 插入一个新的学生记录\n"); /*插入*/printf("\t\t\t7. 保存记录\n"); /*保存*/printf("\t\t\t8. 读取记录\n"); /*读取*/printf("\t\t\t9. 修改记录\n"); /*修改*/printf("\t\t\t10. 退出\n"); /*退出*/printf("\n\t\t 夏翠玉、陈洁丽.\n");printf("******************************************************\n");do{printf("\n\t\t\t输入您的选择(1~10):");scanf("%d",&n);}while(n<1||n>10); /*如果选择项不在1~9之间则重输*/return(n); /*返回选择项,主函数根据该数调用相应的函数*/ }/*输入函数*/STUDENT *create(){int i,s,k;int j=0;STUDENT *head=NULL,*p; /* 定义函数.此函数带回一个指向链表头的指针*/ system("cls");printf("\n请输入您想输入的学生个数:");scanf("%d",&k);for(j=0;j<k;j++){p=(STUDENT *)malloc(LEN); /*开辟一个新的单元*/if(!p) /*如果指针p为空*/{printf("\n输出内存溢出."); /*输出内存溢出*/return (head); /*返回头指针,下同*/}printf("输入学号(0:list end):");scanf("%s",p->num);if(p->num[0]=='0') break; /*如果学号首字符为0则结束输入*/printf("输入姓名:");scanf("%s",p->name);printf("请分别输入语文、数学、英语的分数 %d scores\n",3);/*开始输入*/ s=0; /*计算每个学生的总分,初值为0*/for(i=0;i<3;i++) /*3门课程循环3次*/{do{printf("score%d:",i+1);scanf("%d",&p->score[i]);if(p->score[i]<0 || p->score[i]>100) /*确保成绩在0~100之间*/printf("Data error,please enter again.\n");}while(p->score[i]<0 || p->score[i]>100);s=s+p->score[i]; /*累加各门成绩*/}p->sum=s; /*将总分保存*/p->average=(float)s/3;/*先用强制类型转换将s转换成float型,再求平均值*/ p->order=0; /*未排序前此值为0*/p->next=head; /*将头结点做为新输入结点的后继结点*/head=p; /*新输入结点为新的头结点*/}return(head);}/* 显示全部记录函数*/void print(STUDENT *head){STUDENT *p; /*移动指针*/system("cls");p=head; /*初值为头指针*/printf("\n******************************STUDENT***************\n");printf("----------------------------------------------------\n");printf("| 学号 | 姓名 | 语文 | 数学 | 英语 | 总分 | 平均成绩 | 名次 |\n");printf("------------------------------------------------------\n");while(p!=NULL){printf("| %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);p=p->next;}printf("----------------------------------------------------\n");printf("**************************END*************************\n");}/*查找记录函数*/void search(STUDENT *head){STUDENT *p; /* 移动指针*/char s[5]; /*存放姓名用的字符数组*/system("cls");printf("请输入查找者姓名.\n");scanf("%s",s);p=head; /*将头指针赋给p*/while(strcmp(p->name,s) && p != NULL) /*当记录的姓名不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p!=NULL) /*如果指针不为空*/{printf("\n**************************FOUND*******************\n");printf("------------------------------------------------------\n");printf("| 学号 | 姓名 | 语文 | 数学 | 英语 | 总分 | 平均成绩 | 名次 |\n");printf("-------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->or der);printf("-------------------------------------------------------\n");printf("**************************END************************\n");}elseprintf("\n无此记录.\n",s); /*显示没有该学生*/}/*删除记录函数*/STUDENT *Delete(STUDENT *head){STUDENT *p1,*p2; /*p1为查找到要删除的结点指针,p2为其前驱指针*/ char c,s[6]; /*s[6]用来存放学号,c用来输入字母*/system("cls");printf("请输入要删除的学生的学号: ");scanf("%s",s);p1=p2=head; /*给p1和p2赋初值头指针*/while(strcmp(p1->num,s) && p1 != NULL) /*当记录的学号不是要找的,或指针不为空时*/{p2=p1; /*将p1指针值赋给p2作为p1的前驱指针*/ p1=p1->next; /*将p1指针指向下一条记录*/}if(strcmp(p1->num,s)==0) /*学号找到了*/{printf("***********************FOUND************************\n");pri-----------------------------------------------------------\n");printf("| 学号 | 姓名 | 语文 | 数学 | 英语 | 总分 | 平均成绩 | 名次 |\n");printf("-------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d| %4.2f | %-5d|\n",p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->averag e,p1->order);printf("-----------------------------------------------------\n");printf("***************************************END***************** *********************\n");printf("您确定要删除该学生的记录吗 Y/N ?"); /*提示是否要删除,输入Y 删除,N则退出*/for(;;){scanf("%c",&c);if(c=='n'||c=='N') break; /*如果不删除,则跳出本循环*/if(c=='y'||c=='Y'){if(p1==head) /*若p1==head,说明被删结点是首结点*/head=p1->next; /*把第二个结点地址赋予head*/elsep2->next=p1->next;free(p1);/*否则将一下结点地址赋给前一结点地址*/printf("\n学号为 %s 的学生记录已被删除.\n",s);printf("别忘了重新存储记录.\n");break; /*删除后就跳出循环*/}}}elseprintf("\n找不到学号为 %s 的学生记录.\n",s); /*找不到该结点*/return(head);}/*修改函数*/STUDENT *xiugai(STUDENT *head){STUDENT *q; /* 移动指针*/char s[5]; /*存放姓名用的字符数组*/system("cls");printf("请输入查找者姓名.\n");scanf("%s",s);q=head; /*将头指针赋给p*/while(strcmp(q->name,s) && q != NULL) /*当记录的姓名不是要找的,或指针不为空时*/q=q->next; /*移动指针,指向下一结点*/if(q!=NULL) /*如果指针不为空*/{printf("\n************************FOUND*************************\n");int sum1,i;printf("\n请在下面输入要修改成的学生的记录.\n"); /*提示输入记录信息*/printf("学号:");scanf("%s",q->num);printf("姓名:");scanf("%s",q->name);printf("分别输入 %d 科的分数.\n",3);sum1=0; /*保存新记录的总分,初值为0*/for(i=0;i<3;i++){do{printf("score%d:",i+1);scanf("%d",&q->score[i]);if(q->score[i]>100||q->score[i]<0)printf("Data error,please enter again.\n");}while(q->score[i]>100||q->score[i]<0);sum1=sum1+q->score[i]; /*累加各门成绩*/}q->sum=sum1;q->average=(float)sum1/3;q->order=0;printf("--------------------------------------------------------\n");printf("| 学号 | 姓名 | 语文 | 数学 | 英语 | 总分 | 平均成绩 | 名次 |\n");printf("--------------------------------------------------------\n");printf("| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\n",q->num,q->name,q->score[0],q->score[1],q->score[2],q->sum,q->average,q->or der);printf("--------------------------------------------------------\n");printf("*************************END***************************\n");head=sort(head); /*调用排序的函数,将学生成绩重新排序*/printf("\n学生 %s 已经修改成功.\n",q->name);printf("请别忘了重新存储.\n");}elseprintf("\n无此记录.\n",s); /*显示没有该学生*/return(head);}八、程序调试过程分析(1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!加入初始化函数后,这种现象也随之消失。

相关文档
最新文档