C++课程设计单链表——学生信息管理系统
- 格式:docx
- 大小:311.68 KB
- 文档页数:9
c语言课程设计学生信息管理系统一、背景介绍二、需求分析1.功能需求2.性能需求三、系统设计1.系统架构设计2.数据库设计3.界面设计四、系统实现与测试1.环境搭建与配置2.代码实现3.测试与调试五、总结一、背景介绍学生信息管理系统是一个基本的信息管理系统,用于管理学生的基本信息和课程成绩等数据。
在高校中,学生信息管理系统是一个非常重要的工具,可以帮助教师和管理员更好地了解学生情况,为教育教学提供数据支持。
C语言作为一门非常重要的编程语言,在计算机科学领域得到了广泛应用。
在C语言课程设计中,开发一个学生信息管理系统是非常有意义的。
二、需求分析1.功能需求(1)添加学生信息:包括姓名、性别、年龄等基本信息以及选修课程成绩等详细信息。
(2)删除学生信息:根据学号或姓名删除已有的学生信息。
(3)修改学生信息:根据学号或姓名修改已有的学生信息。
(4)查询学生信息:根据姓名或年龄等条件查询学生基本信息以及选修课程成绩等详细信息。
(5)统计学生信息:统计学生的人数、男女比例、平均年龄等信息。
2.性能需求(1)系统响应速度快,操作简单方便。
(2)数据存储稳定可靠,数据安全性高。
三、系统设计1.系统架构设计本系统采用B/S架构,即浏览器/服务器架构。
用户通过浏览器访问服务器上的网站,进行学生信息管理操作。
服务器端采用C语言编写,通过CGI技术实现与客户端的交互。
客户端使用HTML、CSS和JavaScript等技术实现用户界面。
2.数据库设计本系统采用MySQL数据库存储学生信息和课程成绩等数据。
数据库中包含两张表:学生表和成绩表。
其中,学生表包含字段:学号、姓名、性别、年龄;成绩表包含字段:学号、课程名称、成绩。
3.界面设计本系统的界面应该简洁明了,易于操作。
主要分为以下几个模块:(1)登录模块:用户输入账号和密码登录系统。
(2)添加模块:用户可以添加新的学生信息和课程成绩等数据。
(3)删除模块:用户可以根据学号或姓名删除已有的学生信息。
目录1.摘要 (2)2.功能与数据分析 (3)2.1 功能分析 (3)2.2 数据分析 (3)3.总体设计 (4)4.模块介绍 (5)4.1 查询功能 (5)4.2 修改功能 (5)4.3 删除功能 (7)4. 输出功能 (7)5.编写与测试 (8)6.用法说明 (9)6.1 在vc环境下运行 (9)6.2 查询功能 (9)6.3 修改功能 (10)6.4 删除功能 (11)6.5 输出功能 (12)7.总结 (13)8.附录 (14)摘要学生信息管理系统的主要的目的在于便于老师掌握学生的信息,对学生的信息进行查询和添加,也有利于学生按各种不同的方式查询、修改自己的信息。
摆脱了曲折的路径,提高了学生相互了解、交流的效率。
便于老师、同学及时准确地获得需要的信息。
主要通过数组存放数据,应用循环和选择语句对数据实现录入和删除功能。
关键词:学生信息,链表,选择结构,循环结构2 功能分析2.1功能分析这是一个便于老师管理,便于学生查询学生信息的一个系统。
既然如此,系统必定少不了数据的输入和删除。
数据以文件的形式保存在文件中。
显示时,数据从文件中输入到显示器。
接受数据的是一个结构体链表。
查询功能的实现,把数据从文件中取出来。
查询可按学号查询和按姓名查询两种方法,按学号查询时,将输入的学号和文件中每个学生的学号比较,如果相等,显示该行的数据到显示器,即是要查找的内容。
然后关闭文件。
按姓名查询时,将输入的姓名和文件中每个学生的姓名比较,如果相等,显示该行的数据到显示器,即是要查找的内容。
然后关闭文件。
修改功能的实现,把数据从文件中取出来。
进入修改操作时,学生先找到自己的信息,然后选择修改项目:地址、电话或Email。
选择地址项,则输入新地址,把它赋给存储地址的变量。
选择电话项,则输入新电话,把它赋给存储电话的变量。
选择Email 项,则输入新Email,把它赋给存储Email的变量。
然后关闭文件。
删除功能的实现,需要首先打开文件,把文件里面的信息全部输入到结构体链表中。
C课程设计单链表学生信息管理系统学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了”学生信息管理系统”软件, 该软件适用于所有windows 操作系统, 面向广大用户, 界面简洁, 操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理, 能够对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理, 主要是根据学生的学号及其姓名进行操作的。
该软件能够更加方便管理者管理学生学籍信息。
功能需求说明该系统所需要的功能有: 1、链表的建立2、学生信息的插入;3学生信息的查询;、4学生信息的输出;、5学生信息的修改;、6学生信息的删除;、7良好的欢迎选择界面。
、三、总体方案设计一、实现任务的方法1、在欢迎选择界面中, 使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除, 都是使用链表的相关知识3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;总体结构ZJ建立链表三、模块划分(1) 链表的建立。
(2) 对链表信息的插入。
(3) 对链表信息的查找。
(4) 对链表信息的输出。
(5) 对链表信息的删除。
(6) 对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中三、数据结构说明」、自定义的数据结构资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分"谍稈数〃课程名(最參课程数为nn "学分 "总分"平均分 "默认枸匯雷数"计算该学生课程的加权平均分(总咸绩/总学分)2、inform (学生基本信息)用于存放学生基本信息,包括姓名、 学号、性别等。
"元素类型 "姓容 〃学号 “性别 "身份证号"出生年月曰 "家庭地址 "电话号码 "课程咸绩〃谍程咸绩输入 "遥程成缢输出3、结点结构-Nodetype,定义了数据域inform 和指针域next; structNodetype//结点结构{inform data; /7数据域Node type 切氏t; 〃指针域};Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
学生信息管理系统设计案例一、引言学生信息管理系统是一种集学生信息录入、查询、修改和删除等功能于一体的软件系统。
为了满足学校对学生信息的有效管理和查询需求,本文将介绍一种用C语言实现的学生信息管理系统设计案例。
二、需求分析学生信息管理系统主要有以下几个功能模块: 1. 学生信息录入:包括学生姓名、学号、年龄、性别等基本信息的录入。
2. 学生信息查询:可以根据学号或姓名进行查询,并显示查询结果。
3. 学生信息修改:可以根据学号或姓名选择要修改的学生信息,并进行修改操作。
4. 学生信息删除:可以根据学号或姓名选择要删除的学生信息,并进行删除操作。
三、系统设计1. 数据结构设计为了存储学生信息,我们需要定义一个学生结构体,包括姓名、学号、年龄、性别等字段。
同时,为了方便管理学生信息,我们可以使用链表数据结构来存储学生信息,并设计一个头节点来指向链表的第一个节点。
struct student {char name[20];int student_id;int age;char gender[10];struct student* next;};struct student* head; // 头节点2. 功能模块设计2.1 学生信息录入在该功能模块中,用户需要输入学生的姓名、学号、年龄和性别等信息,并将该学生信息添加到链表中。
为了方便起见,我们可以将该功能模块定义为一个函数add_student()。
2.2 学生信息查询在该功能模块中,用户可以根据学号或姓名进行学生信息的查询。
查询结果将会显示学生的基本信息。
为了方便起见,我们可以将该功能模块定义为一个函数search_student()。
2.3 学生信息修改在该功能模块中,用户可以根据学号或姓名选择要修改的学生信息,并进行修改操作。
为了方便起见,我们可以将该功能模块定义为一个函数update_student()。
2.4 学生信息删除在该功能模块中,用户可以根据学号或姓名选择要删除的学生信息,并进行删除操作。
《C语言程序设计实训2》报告设计题目:基于链表的学生信息管理系统学院名称:信息科学技术学院专业:网络工程班级:二班姓名:学号:指导教师:提交日期:一、 实验内容:编写并调试程序,实现学校各专业班级学生信息的管理。
要求一个工程下多个文件。
main 函数以单独的文件main.cpp 存放。
在头文件student.h 中定义学生信息的结构体类型,包括:学号、姓名、专业、班级、3门成绩;和符号常量N (学生数)。
(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)。
全局类型的定义如下:二、实验要求:(1) main 函数:以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
(2) 定义函数STU *CreateList (char * filename ):从二进制文件“studentInfo.dat ”中依次读取12个学生的数据(在文件中学生信息按学号由低到高依次存放),建立带头结点(特殊结点,不放学生信息)的、有序的单链表(链表中各学生信息按学号由低到高依次存放), 返回表头指针。
每次从文件中读一个学生的信息,并将该学生信息插入到链表的表尾。
设置头结点的目的:在链表中第一个学生结点之前插入或者是删除第一个学生结点的时候不必做特殊处理)更灵活的方法:从文件中循环读数据时,根据当前学生信息的next成员的值,决定是否进行下次循环,如果next==NULL,则表明读到最后一个学生信息,循环结束。
(3)定义函数void Output (STU *head):以指向链表头结点的指针为参数,将链表中所有学生的信息表格化输出。
定义函数void OutOneNode(STU *p): 输出参数所指的链表中一个结点的信息。
(4)STU *Max(STU *head):查找总成绩最高的学生,返回指向该学生结点的指针。
考虑特殊情况,找到两个及以上相同最高分同学的情况,如何处理?(5)定义函数STU *Search_num(STU * head ,char *num ):查找指定的学生,返回指向该学生结点的指针。
题目:学生信息管理系统一、需求分析任务要求:自学C语言中有关链表及外部文件得内容,设计学生信息管理系统。
具体要求如下:◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;◆能够提供添加、删除与修改学生信息等功能;◆能将通讯录保存在文件中;◆能够按指定方式输出学生信息.系统功能需求分析:★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型得指针,用于指向各结点;★ 2、分别建立具有添加、删除、修改、查询等功能得子函数,完成相应功能,对程序实现模块化。
这其中要用到对链表得删除、插入等知识。
删除时用一结构体指针指向链表得第一个结点,检查该节点得值就是否等于输入得要删除得学号,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加.★3、为实现存储功能,需用到文件得相关函数,打开文件,将添加、修改或删除得信息存入磁盘中。
★4、为以表格得形式输出文件,宏定义格式化输出语句,指定输出学生信息。
二、概要设计系统总体设计框架:对程序进行模块化,建立添加、修改、删除、查找与显示功能得子函数,各子函数中运用链表存储数据。
从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。
系统功能模块图:三、详细设计主要功能模块得算法设计思路如下:1、查询通讯录信息(void chakan())(1)为开辟一个新单元(2)输入查询关键字:(3)读取保存得文件数据输入ASCLL字符:(4)在链表中寻找相应结点;(5)调用输出函数,输出结点信息.2、添加信息函数(void add())(1)定义指向结构体变量得指针;(2)移动指针,找到插入结点;(3)在要插入得结点输入信息;(4)调用保存函数,打开文件,保存输入信息。
3、删除信息函数(void del())(1)定义指向结构体变量得指针;(2)用指针检验链表中就是否有记录,若没记录,返回主函数;(3)根据要修改得编号查找要删除得结点;(4)修改链表,删除对应结点。
流程图:开始显示菜单1.调用调用数6. 7. 8. 9. 非法选项cc函数dd函ay()de函数ad函数mo函fy() sear函sort():h()函save()函数load函数结束全局变量struct stud{char name[20];long num;int age;char sex;int score[3];char tele[12];struct stud *next;}子程序1. creat() 函数功能:创建链表,提示输入学生信息,储存到链表中,录入完成后输入y 继续,输入止,返回主菜单2. display() 函数功能:显示当前已经存入链表的信息3. dele() 函数功能:删除链表中学生信息,可按姓名或学号删除4. add() 函数功能:按学号插入学生信息5. modify() 函数功能:修改链表中学生信息6. search() 函数功能:查找学生信息,可按学号或姓名查找7. sort() 函数功能:对信息进行排序,可实现分别对三门成绩排序8. save() 函数功能:将链表中的数据保存到指定文件9.load() 函数功能:将指定文件中已有的数据读入链表源程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>struct stud{char name[20];long num;int age;char sex;int score[3];char tele[12];for(;;){ clrscr(); /*printf( printf(清屏函数*/ \n\n\t\tWelcome \n\n\t**** ” ); printf(to student informationmanagement**********************************************************\n\t\t\t 1: Enter the information );system ” );printf( “ \n\t\t\t 2: List the information );“\n\t\t\t 3: Delete the information ” );printf( “\n\t\t\t 4: Add the information ” );printf( “\n\t\t\t 5: Modify the information ” );printf( “\n\t\t\t 6: Search the information ” );printf( “ \n\t\t\t 7: Sort the information ” );printf( “ \n\t\t\t 8: Save the information ” );printf( “ \n\t\t\t 9: Load the information ” );printf( “\n\t\t\t 0: Exit “ );printf( “\n\t\t\t Enter your choice: ” );fflush(stdin);ch=getchar();getchar();switch(ch){case ‘ 1' : head=creat();break;case ‘ 2' :display(head);system( “pause ”); break;struct stud *next;}main(){struct stud *head;struct stud *creat(void); void display(struct stud *head);struct stud *dele(struct stud *head);struct stud *add(struct stud *head); struct stud *modify(struct stud *head); void search(struct stud*head); void save(struct stud *head);struct stud *sort(struct stud *head); void save(struct stud *head);struct stud *load();char ch; head=NULL; case ‘ 3' :head=dele(head); system( “pause ”);break;case ‘ 4' :head=add(head); system( “pause ”);break;case ‘ 5' :head=modify(head); system( “pause ”);break;case ‘ 6' :search(head); system( “pause ”);break;case ‘ 7' :head=sort(head); system( “pause ”);break;case ‘ 8' :save(head);system( “pause ”);break;case ‘ 9' :head=load();break;case ‘ 0' :return;break; default : clrscr();printf( “\n\t Error!Please check your input\n\n ” );system( “pause ”);}}}struct stud *creat(void) /* 链表的创建*/ {struct stud *head,*p1;char ch;clrscr(); head=NULL;p1=(struct stud *)malloc(sizeof(struct stud)); printf( “ \t enter name: ”); gets(p1->name); printf( “ \t enter number: ” );scanf( “%ld” ,&p1->num);printf( “ \t enter age: ” );scanf( “ %d” ,&p1->age);printf( “ \t enter sex: ” );fflush(stdin);scanf( “ %c” ,&p1->sex);' y ' ||ch== ' Y ' )); printf( “ \t enter Math score: ” );scanf( “ %d ” ,&p1->score[0]); printf( “ \t enter English score: ” );scanf( “ %d ” ,&p1->score[1]); printf( “ \t enter C score: ” );scanf( “ %d ” ,&p1->score[2]); printf( “ \t enter telephone number: ”);fflush(stdin); gets(p1->tele); head=p1;p1->next=NULL; do{ printf(“\n\tDO YOU WANT TO CONTINUE? Y or N? ”);printf( “ \n\tEnter your choise:”);fflush(stdin); ch=getchar(); clrscr(); if(ch== head=add(head); else if(ch!=' N '&&ch!= 'n '){ printf( “ \n\tError !Please check your input ” );ch='y ';}}while(ch== ' y ' ||ch== 'Y '); return(head);}struct stud *dele(struct stud *head)/* 链表的删除 */ {struct stud *p1,*p2; int choose;long delnum; char name[20]; clrscr();printf( “ \n\t\tChoose the way you want ”); printf( “ \n\t 1: According to name\n “); printf( “ \n\t 2: According to num\n ”); printf( “ \n\t Enter your choice: ”);scanf( “ %d ” ,&choose); fflush(stdin); if(choose==1){printf( “\n\t Enter the name:” );gets(name); if(head==NULL){printf( “ \t\nNo information !\n ” );return(head);} p1=head; while(strcmp(name,p1->name)!=0&&p1->next!=NULL) {p2=p1;p1=p1->next;} if(strcmp(name,p1->name)==0) {if(p1==head)head=p1->next; else p2->next=p1->next;printf( “ \t Delete Successed !\n\n}else printf( “ \t Not been find!\n\n ” );return(head);}else if(choose==2){printf( “ \n\tEnter the number: ”);scanf( “%ld ” ,&delnum); if(head==NULL){printf(“ \nNo information !\n ”);return(head);} p1=head;while(delnum!=p1->num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(delnum==p1->num) {if(p1==head)head=p1->next;else p2->next=p1->next;printf( “ \t Delete Successed !\n\n ”);}else printf( “ \t Not been find!\n ” );return(head);}else {printf( “ \n\t Error!Please check your input\n\n ” );return(head);}}void display(struct stud *head){struct stud *p;p=head;clrscr();if(head==NULL)printf( “ \n\t No information\n\n ”);else {printf( “ name\tnumber\tage\tsex\tMath\tEnglish\tC\ttelephone number\n ” ); do{printf( “ %s\t%ld\t%d\t%c\t%d\t%d\t%d\t%s\n ” ,p->name,p->num,p->age,p->sex,p->s core[0],p->score[1],p->score[2],p->tele);p=p->next;}while(p!=NULL); }}struct stud *add(struct stud *head)/* 链表的插入*/{struct stud *p1,*p2,*p0;p0=(struct stud *)malloc(sizeof(struct stud));clrscr();printf( “ \n\t\t Input the information: ” );printf( “ \n\t\t name: ” );fflush(stdin); gets(p0->name);printf( “ \t\t number: ” );scanf( “%ld” ,&p0->num);printf( “ \t\t age: ”);scanf( “ %d” ,&p0->age);printf( “ \t\t sex: ”);fflush(stdin);scanf( “ %c” ,&p0->sex);printf( “ \t\t Math score: ”);scanf( “ %d” ,&p0->score[0]);printf( “ \t\t English score: ”);scanf( “ %d” ,&p0->score[1]);printf( “ \t\t C score: ”);scanf( “ %d” ,&p0->score[2]);printf( “ \t\t telephone number: ” );fflush(stdin);gets(p0->tele);p1=head; if(head==NULL){head=p0;p0->next=NULL;}else{while(p0->num>p1->num){p2=p1, p1=p1->next;} if(p0->num<=p1->num){if(head==p1)head=p0;else p2->next=p0;p0->next=p1;}else{p1->next=p0;p0->next=NULL;}}return(head);}struct stud *modify(struct stud *head)/* 链表的修改*/{struct stud *p1,*p2,*p0;clrscr();printf( “ \n\tInput the student ' s name: ”);p0=(struct stud *)malloc(sizeof(struct stud));fflush(stdin);gets(p0->name);if(head==NULL){printf( “ \nNo information !\n\n ”);return(head);} p1=head; while(strcmp(p0->name,p1->name)!=0&&p1->next!=NULL){p2=p1;p1=p1->next;} if(strcmp(p0->name,p1->name)==0){printf( “ name\tnumber\tage\tsex\tMath\tEnglish\tC\ttelephone number\n ” ); printf( “ %s\t%ld\t%d\t%c\t%d\t%d\t%d\t%s\n ” ,p1->name,p1->num,p1->age,p1->sex,p1->score[0],p1->score[1],p1->score[2],p1->tele);“ \tNew information: \t\t\tage: ” );sex: ” ); fflush(stdin); Math score: ” ); Englishscore: ” ); Cscore: ” ); telephonenumber: ” );{head=p0;p0->next=NULL;} else {while(p0->num>p1->num) {p2=p1;p1=p1->next;}if(p0->num<=p1->num) {if(head==p1)head=p0;else p2->next=p0; p0->next=p1;}else{p1->next=p0;p0->next=NULL;}} printf( “ Modify Successed !\n\n ”);} else printf( “ Not been find!\n\n ”);return(head);}void search(struct stud *head)/* 查询链表 */{struct stud *p; int choose; long num;char name[20]; clrscr();printf( “ \n\t\tChoose the way you want ”); printf( “ \n\t 1: According to name\n “); printf( “ \n\t 2: According to num\n ”);printf( “ \n\t Enter your choice: ”);scanf( “ %d ” ,&choose); fflush(stdin); if(choose==1){printf( “\n\t enter the name:” );gets(name);if(head==NULL){printf( “ \t\nNo information !\n\n ” );}else {p=head;while(strcmp(name,p->name)!=0&&p->next!=NULL)number: ” ); scanf( “ %ld ” ,&p0->num); printf(scanf( “ %d” ,&p0->age); printf( “ \t\t\t scanf( “ %c ” ,&p0->sex); printf( “ \t\t\tscanf( “ %d ” ,&p1->score[0]);printf( “ \t\t\t scanf( “ %d ” ,&p1->score[1]); printf( “ \t\t\t scanf( “%d ”,&p1->score[2]);printf( “ \t\t\tif(p1==head)head=p1->next; else p2->next=p1->next; printf( fflush(stdin); gets(p0->tele); p1=head; if(head==NULL)p=q,{p=p->next;}if(strcmp(name,p->name)==0){printf( “ name\tnumber\tage\tsex\tMath\tEnglish\tC\ttelephone number\n ” );printf( “ %s\t%ld\t%d\t%c\t%d\t%d\t%d\t%s\n ” ,p->name,p->num,p->age,p->sex,p->score[0],p->score[1],p->score[2],p->tele);}else printf( “ Not been find!\n\n ” );}} else if(choose==2){printf( “ \n\t Enter the number: ”);scanf( “%ld ” ,&num); if(head==NULL){printf( “ \nNo information!\n ” );}else {p=head;while(num!=p->num&&p->next!=NULL) {p=p->next;} if(num==p->num){printf( “ name\tnumber\tage\tsex\tMath\tEnglish\tC\ttelephone number\n ” );printf( “ %s\t%ld\t%d\t%c\t%d\t%d\t%d\t%s\n ” ,p->name,p->num,p->age,p->sex,p->score[0],p->score[1],p->score[2],p->tele);}else printf( “\t Not been find!\n ” );}}else printf(“\n\t Error!Please check your input\n\n” );}struct stud *sort(struct stud *head){struct stud *first; struct stud *t; struct stud *p; struct stud *q; int ch; clrscr();printf( “ \n\t\tChoose the way you want ”); printf( “ \n\t 1: According to Math:\n ” ); printf( “\n\t 2: According to English\n ” );printf( “ \n\t 3: According to C\n ”); printf( “ \n\t Enter your choice: ” );scanf( “ %d ” ,&ch); first = head->next; head->next = NULL; while (first != NULL){for (t=first, q=head; ((q!=NULL) && (q->score[ch-1]>t->score[ch-1])); q=q->next);first = first->next;,filename);{ fprintf(fp, fprintf(fp, fprintf(fp, fprintf(fp, fprintf(fp, fprintf(fp, fprintf(fp, fprintf(fp, p=p->next;”%s\t ” ,p->name); %ld\t ” ,p->num); %d\t ” ,p->age); %c\t ” ,p->sex); %d\t ” ,p->score[0]); %d\t ” ,p->score[1]); %d\t ” ,p->score[2]); %s\t\n ” ,p->telprintf( “ \n\t\tSuccess !\n ” );fclose(fp);}struct stud *load() /* 链表的导入 */ {FILE *fp;char filename[20];struct stud *head,*p1,*p2; printf( “ \n\ninput the filename: “ );fflush(stdin);gets(filename); if((fp=fopen(filename, ” r ” ))==NULL) {printf( “ Load file %s error ! Type it again.\n\n ” ,filename);exit(0);}if (q == head) head = t; else {p->next = t;} t->next = q;}printf( “ \n\t\tSuccess !\n ” );return head;}void save(struct stud *head) /* 保存链表 */ {FILE *fp; struct stud *p; char filename[20];printf( “ \n\ninput the filename: “ );fflush(stdin);gets(filename); if((fp=fopen(filename, ” w ” ))==NULL) {printf( “ Save file %s error ! Type it again.\n\n exit(0);} p=head; while(p!=NULL)if(!feof(fp)) {head=(struct stud *) malloc(sizeof(struct stud)); fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, p2=head;} while( !feof(fp)) { p1= (struct stud *) malloc(sizeof(struct stud)); fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp, fscanf(fp,fscanf(fp, fscanf(fp, fscanf(fp,%s\t ” ,&head->name); ,&head->num); ,&head->age); ,&head->sex); ,&head->score[0]); ,&head->score[1]); ,&head->score[2]); ”,&head->tele);%ld\t ” %d\t ” %c\t ” %d\t ” %d\t ” %d\t ”%s\t\n%s\t ” %ld\t %d\t ” %c\t ” %d\t ” %d\t ” %d \t ” %,&p1->name);” ,&p1->num);,&p1->age);,&p1->sex);,&p1->score[0]);,&p1->score[1]);,&p1->score[2]); ” ,&p1->tele); p2->next=p1;p2=p1; }p2->next=NULL;printf( “ \n\t\t Success !\n”);fclose(fp);return(head); 心得体会这次的课程设计,使我们对C 语言有了更近一步的认识和了解, 不仅巩固了以前所学过的知识, 而且在查阅资料过程中学到了很多书本上 学不到的知识。
路漫漫其修远兮,吾将.上F而求索・百度文库用C语言实现线性表的基本操作,能创建一个基于学生信息管理的链表,至少包含数据输入、数据输出、数据处理等操作。
在主函数里能实现以下功能。
运行后出现一个选择提示。
可选择的功能有1)创建新的学生信息链表2)增加一个新的学生信息3)按学号删除某个学生信息4)按学号查找某个学生信息5)可以按照学生成绩对■链表排序6)退出系统#include "stdio.h"#include "stdlib.h"#include "string.h n#include ,,conio.h Hjiemian();struct student(char name[50];char sex[5];int age;char num[50];float scorel;float score2;float score3;float sum;float ave;}stu[50],del;void gnl()(int i=0;char numl;for(i=0;i<50;i++)(printf「请输入要添加的学生资料:\n“);printf(“学号巧;scanf("%s",stu[i].num);printf("姓名巧;scanf("%s",stu[i].name);printf(“性别巧;scanf("%s",&stu[i].sex);printf(“年龄巧;scanf("%d",&stu[i].age);11目上下而求索•百度文库printf(”请输入学生的三门成绩:'俏;printf("语文门;scanf(,,%f,,,&stu[i].scorel);printf(“数学门;scanf(,,%f,,,&stu[i].score2);printf("英语巧;scanf(,,%f,,,&stu[i].score3);printf("是否继续添加:y/n\n“); scanf(,,%c,,,&numl);scanf(,,%c,,,&numl);if(numl==,N, 11 numl=="n,){system(,,cls"); jiemian();)))void gn2()(int i;char num[50];printf「请输入要查找的学生学号:\n“);scanf(,,%s,,/num);for(i=0;i<50;i++)if(strcmp(stu[i].num,num)==O) (stu[i].sum=stu[i].scorel+stu[i].score2+stu[i].score3;stu[i].ave=stu[i].sum^;printf(',%s\t%s\t%s\t%d\t%,2f\t%.2f\t%.2f\t%.2f\t%.2f:\n'l/stu[i].num/stu[i].name/stu[i].sex/stu[i] .age,s tu[i].scorel/stu[i].score2/stu[i].score3/stu[i].sum/stu[i].ave);break;)if(i==50)printf("查找不到!请重新输入!\n");22路漫漫其修远兮,吾将上F而求索・百度文库getch(); systemf'cls"); jiemian();)void gn3()(char numlJ=0;printf("请输入要修改的学生学号:\n“);scanf(,,%s,,/stu[i].num);printf(,l%s\t%s\t%s\t%d\t%,2f\t%.2f\t%.2f\t%.2f\t%.2f:\n'l/stu[i].num/stu[i].name/stu[i].sex/stu[i] .age,s tu[i].scorel/stu[i].score2/stu[i].score3/stu[i].sum/stu[i].ave);printf("姓名门;scanf(,,%s,,/stu[i].name);printf(“性别门;scanf(,,%s,,/stu[i].sex);printf("年龄门;scanf(,,%d,,,&stu[i].age);printf(“请输入学生的三门成绩:\n“);printf("语文门;scanf(,,%f,,,&stu[i].scorel);printf(“数学门;scanf(,,%f,,,&stu[i].score2);printf("英语门;scanf(,,%f,,,&stu[i].score3);printf("是否继续修改:y/n?\n“);scanf(,,%c"/&numl);scanf(,,%c,\&numl);if(numl==,N, 11 numl==,n,)systemf'cls"); jiemian();)void gn4()(int i;char num[50];printf("请输入要删除的学生学号:\n“);scanf(,,%s,,,num);for(i=0;i<50;i++) 33if(strcmp(num,stu[i].num)==O)(printf(,,%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n,,/stu[i].num/stu[i].name/stu[i].sex/stu[i] .age,stu[i].scorel/stu[i].score2/stu[i].score3/stu[i].sum/stu[i].ave);stu[i]=del;printf("信息已删除,按任意键返回..\n“); break;)if(i==50)printf ("您输入的信息不存在!\n”);getch();system("cls"); jiemian();)void gn5()(int i=0;stu[i].sum=stu[i].scorel+stu[i].score2+stu[i].score3;stu[i].ave=stu[i].sum/3;printf("学号\t姓名\t性别\t年龄\t语文\t数学\t英语\t总成绩\t平均成绩\n");for(i=0;i<50;i++)(if(stu[i].age==O)break;printf(,,%s\t%s\t%s\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f:\n,,/stu[i].num/stu[i].name/stu[i].sex/stu[i] .age,stu[i].scorel/stu[i].score2/stu[i].score3/stu[i].sum/stu[i].ave);)printf("按任意键返回.getch();system(,,cls n);jiemian();)void gn6()(FILE *fp;int i;char filename[50];printf(,,\n N); 44路漫漫其修远兮,吾将上F而求索・百度文库printf(,,\n M);printf(“请输入要保存的文件名:");scanf(”%s”,filename);if((fp=fopen(filename/,wb,,))==NULL)printf("文件名为空,不能保存!\n");for(i=0;i<50;i++)(if(fwrite(&stu[i],sizeof(struct student),l,fp)!=l) printf("文件保存失败!\n”);)fclose(fp);printf (“文件己保存!\n“);printf。
C语言课程设计报告链表实现学生信息管理一.课程设计目标C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。
本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。
结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。
另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。
二.设计项目:学生学籍管理该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。
它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。
主要功能模块:1. 浏览学生信息:显示学生的信息。
2. 插入学生信息:添加学生的信息。
3. 删除学生信息:通过输入学号删除学生的信息。
4. 修改学生信息:通过输入学号修改学生的信息。
5. 保存学生信息:将学生信息保存到文件。
0. 退出系统:结束程序的运行,结束前询问是否保存信息。
三.具体任务由老师提供主菜单程序以及第0、2个模块。
学生在这个信息系统中加入四个模块,即:1. 浏览学生信息3. 删除学生信息4. 修改学生信息5. 保存学生信息四、详细介绍1、浏览学生信息2、插入学生信息3、删除学生信息4、修改学生信息5、信息的写入读出6、学生信息的保存与释放五、课程设计实践小节这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。
在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
链表的使用在今后的程序设计中尤为关键,他可以保存、调用和更改数据,在信息时代的程序设计中很重要。
在这次的程序设计中,老师和同学都是我强大的后盾。
C语言课程设计报告链表实现学生信息管理一.课程设计目标C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。
本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。
结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。
另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。
二.设计项目:学生学籍管理该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。
它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。
主要功能模块:1. 浏览学生信息:显示学生的信息。
2. 插入学生信息:添加学生的信息。
3. 删除学生信息:通过输入学号删除学生的信息。
4. 修改学生信息:通过输入学号修改学生的信息。
5. 保存学生信息:将学生信息保存到文件。
0. 退出系统:结束程序的运行,结束前询问是否保存信息。
三.具体任务由老师提供主菜单程序以及第0、2个模块。
学生在这个信息系统中加入四个模块,即:1. 浏览学生信息3. 删除学生信息4. 修改学生信息5. 保存学生信息四、详细介绍1、浏览学生信息2、插入学生信息3、删除学生信息4、修改学生信息5、信息的写入读出6、学生信息的保存与释放五、课程设计实践小节这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。
在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
链表的使用在今后的程序设计中尤为关键,他可以保存、调用和更改数据,在信息时代的程序设计中很重要。
在这次的程序设计中,老师和同学都是我强大的后盾。
学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有win dows操作系统,面向广大用户,界面简洁,操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。
该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明该系统所需要的功能有:1链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。
三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform类;在定义学生课程成绩时,自定义了一个achieve结构体;ST rucr acnieve{ int nunber :char nane [10] [10];float achieveiaent [13]:float xuefen [10]: float 0 : float average ; achieve C): float count average (); struct Inform {chai name [10]: charnum[20]: string sex : string: id; string bir; string adr : string tel , achieve ach; void achinput 0 : void achprint 0 ; };三、模块划分 (1) 链表的建立。
(2) 对链表信息的插入。
(3) 对链表信息的查找。
(4) 对链表信息的输出。
(5) 对链表信息的删除。
(6) 对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中三、数据结构说明一、自定义的数据结构:1、achieve (课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学 分、总分和平均分。
"谍稈数〃课程容(最參课稈数为nn"成绩 "学专 "总分"平均分"默认枸隆雷教"计算该学生课程的加权平均分(总咸绩/总学分)"元素类型"姓名 〃学号 〃性别"身份证号 //出生年月曰 〃家庭地址 "电话号码 "课程咸绩 "谍程成绩输入 "遥程成缢输出3、结点结构-Nodetype,定义了数据域inform 和指针域next;2、inform (学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
//构造函数 〃析构函数 〃建立链表 //插入学生信息 //删除学生信息 //查找 //修改〃输出信息 //声明头指针HodrtTii"?b-^riesrt-nULL,a _>nBKl-b; p 口 ; \匚 CDUT«削建宁右? ClIl i >ES ;struct Nodetype //结点结构{inform data; "数据域Nodetvpe 〃指针域};二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针class Student {public :Student (); ^Student (); void creat (); void insert (); void del 0 ; void search (), void modifyO , void Display 0 ; private :Xodetype ^head;四、各模块设计说明'、建立:首先:建立一个空链表:Stude nt::Stude nt() {head=new Nodetype; head-> next=NULL; 表明这是一个空链表coutvv'请建立链表\n"; }然后建立链表gutfC"吉粧h 寿庭堆址:匹”: cin>>3:・;=drccut'K"ffi 入电诸号码當"T .1 el.oaufc<C 是否更齢入宁土肌程术娠诂息如矿; "判斷是瓷桁入审晴C 1K >)C ;(c=/ | [ c=?-!r )[a azhiiiput [);"创益一今戲韦电三并将该韦电地址侔存在抱軒变誉b 申 ■V 牠丄湎换1T 得至侶技作ZJb 却歎掘加使结点戲合终在链表的最后面E.两个对象正常输出、添加:按照学号从小到大的顺序插入:s=iiew Xodetvpe;s->daTa=s;q=head.p^q-'/nerXt;irhi le(pl =NUHAj6strcnp (p->data, num, x. nuuO <0)■q=pp=p->next;} 〃迪历琵表查找梵应插入的位匿亘到找的某书直的数据城比输入£学号丄s~ ^next^p: ” _______ __q->next=s;〉I 插入新结点£cout«*添:山成功'是否维续奪加(Y/?4)*«en£ll; cin>>cs■}三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
四、查找:利用学号和姓名两种方式进行查找,查找时主要是遍历链表进行判断while(p!=NULL&&(d==1 &&strcmp(i nput,p->data .n um)!=0)||(d==2&&strcmp(i np ut,p->data .n ame)!=0)){p=p->n ext;} 〃遍历链表查找符合要求的节点五、删除:利用节点的删除操作,找到链表中第i-1个结点,修改其指向后继的指针:q = p->n ext;p->n ext = q->n ext;delete(q);六、更改:利用查找的操作,查到后在进行重新输入的操作;五、测试情况说明测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第一个数据进行操作,如下图所示:cT]地it;派匕^^3 = 657668?中的数据输岀如下;:朱方菠'证号=3站£?6鲫强日:19920924 庭芒止匕浙江幵此话是■刁弓:百咋肚溯日逻辑关丟弄错! 歹应该为T■冷="缶:rfjpi 加 T p-计「SUP '=0)1但是当要进行查找、删除、修改操作时,系统只能对第一个对象进行操作查看程序时,发现查找函数、删除和修改函数都有个逻辑错误Bviichld} luw ItCOUt "1三年1亍月「eudl. cin>: inpuibreak,cue 2:CffUt "•刖■■占•”加机:cln> input. bre^k;:^cderype *p.p=q ; h :rii Lr If'12v :肚口rr i* h;.-iT |)- -1AT a. - iin '!^'p=p-~霓圧祥云誉疋存舎寻求曲节戸2 f ((d=】iist j ■眄J (i rput . p->dat 岳 iunZ=0) (<t=3Mt3tra()(input, f'dat H , nane) =0)、 {emit -<"找到的悄岂tlT : \n l: cwZ"学号:<r «p ->data. mn«* \n* : *«p ->4at8i n?»« "■ n' < < "身曲证号;*«p ->dai;s. i4C<* \p* 机"性和:* «jr>daxa. m «h \n J X 生日bLr^' \a'«家庭地址:妝p->dita ■dr«, W 农"电话号码;Wp~>dag hW 诃; if p- da?a. Eih. nunbcr^B)71 耳匚拄訐"If : H ■; <p -/ca*E. achprint : }全部修改后,程序的上述错误就没再出现了。
错误二:当提示是否输入课程成绩信息时,输入第一门课程名时,会出现无穷循环对于这种状况,我百思不得其解,后来请教其他同学,他告诉我错误在于声明课程成绩信息时出错了struct achieve{ __int numb 雯i[:^*7: hoff iQat^acIneveinem [10].float xuefen[lD]: float siunO ;float average 0;achieve();f lt>a t count average1:';"课程数"踝程名(最多课程数为1(0"锻绩"学分"总分//■平肉分打默认构罐雨数〃计算谏学主课程的加权平均分(总成绩/总学井)但当输入第一门课程后就会出现下图所示状况:应该为二维数组,修改之后,课程成绩输入输出便正常了(讣时諦人总團貓$咼毎和请输未按照学号大小输出!,是否押续添加(Y/N) \<sidl:Sw 帕是字符格式不能魁行这种比较!im Crt 扁 nd w 序;邨花LI 32X CHI <1exe長中的魏捱布岀如下. 千':予方捏 付证耳;5弋创 列:flSitWl :同汇话耳码;J 曲需“5错误三:输入 学生信息时不按照学号大小顺序,输出结果时也不按照从小到大的顺序输出。
如下图所示后来查看程序,发现插入函数(insert )中判断新插入的数据的位置时出现问题 whi 1 e (p! =XULL&^p->data,num<x. num)(q-P ; ~7p=p->next ;) //矽於i 表杏找x 应插入的位置直到]S'>next _p; q _)next=s ;cout«*S55 加成 cin^^cs;寻地1「;河/ 话吕码:54G5eP4EG应该为strcmp(p->data.num,x.num)<0;之后输出正确了!六、评价和改进意见(1)不足:①程序可能存在冗杂之处。