c语言程序设计报告-链表实现学生信息管理
数据结构 用链表实现学生信息管理系统
3、4、7、#include <iostream>using namespace std;//实现线性表的链式存储结构的类型定义typedef int Elemtype;#define OK 1;#define ERROR -1;struct NODE //结点类型{Elemtype elem;NODE *next;};struct LINK_LIST //链表类型{NODE *head;};//典型操作的算法实现//初始化链表Lint InitList(LINK_LIST *L){L->head = (NODE*)malloc(sizeof(NODE)); //为头结点分配存储单元if (L->head) {L->head->next=NULL; return OK;}else return ERROR ;}//销毁链表Lvoid DestoryList(LINK_LIST *L){NODE *p;while (L->head) //依次删除链表中的所有结点{p=L->head; L->head=L->head->next;free(p);}}//清空链表Lvoid ClearList(LINK_LIST *L){NODE *p;while (L->head->next){ //p指向链表中头结点后面的第一个结点p=L->head->next;L->head->next=p->next; //删除p结点free(p); //释放p结点占据的存储空间}}//求链表L的长度int ListLength(LINK_LIST L){NODE *p;int len;len=0;for(p=L.head;p->next!=NULL; p=p->next)len++ ;return(len);}// 判链表L空否。
利用单链表实现学生信息管理
}
}
};
int main(int argc, char* argv[])
{
printf("Hello World!\n");
SeqList GIS2010;
int x=1;
while(x!=0){
printf("请输入以下选项:\n");
printf("1:信息浏览\n");
}
void ;
current=head->next;
for(int i=0;i<length&¤t!=NULL;i++){
//如果当前数据的id等于用户输入要删除数据的id,进行删除操作。
if(strcmp(current->id,ID)==0){
#include <iostream.h>
#include <string.h>
struct Student
{
char id[10];
char name[10];
char sex[10];
char grade[10];
char tel[20];
int age;
Student *next;
};
class SeqList
cout<<"AGE="<<endl;
cin>>newStudent.age;
newStudent.next=NULL;
GIS2010.ListInsert(newStudent);
break;
case 3:
C语言程序设计实验实验报告7
C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。
实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。
实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。
2. 删除学生信息:从链表中删除指定学号的学生信息。
5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。
7. 退出程序:退出学生信息管理系统。
实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。
2. 编写添加学生信息函数,新建链表节点并插入链表末尾。
3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。
4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。
6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。
7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。
8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。
实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。
经测试,程序稳定运行,功能正常,符合需求。
本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。
虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。
在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。
同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。
C语言程序设计报告-基于链表的学生信息管理系统
《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语言课程设计报告---学生信息管理系统
题目:学生信息管理系统一、需求分析任务要求:自学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)修改链表,删除对应结点。
C课程设计报告单链表学生信息管理系统
.学生信息管理系统设计文档一、设计任务描述为了实现学籍管理的简单化,我们基于Visual C++集成开发环境编写了“学生信息管理系统”软件,该软件适用于所有windows操作系统,面向广大用户,界面简洁,操作简单。
此软件主要是实现对学生学籍信息进行系统化的管理,可以对学生基本信息进行添加、删除、查找、修改以及对学生成绩的管理,主要是根据学生的学号及其姓名进行操作的。
该软件可以更加方便管理者管理学生学籍信息。
二、功能需求说明该系统所需要的功能有:1、链表的建立;2、学生信息的插入;3、学生信息的查询;4、学生信息的输出;5、学生信息的修改;6、学生信息的删除;7、良好的欢迎选择界面。
三、总体方案设计一、实现任务的方法1、在欢迎选择界面中,使用Switch 这一选择结构来连接程序的执行和用户的命令;2、在从学生信息的建立直到删除,都是使用链表的相关知识;3、在定义学生信息时,建立一个Inform 类;在定义学生课程成绩时,自定义优质范文.了一个achieve 结构体;二、总体结构三、模块划分(1)链表的建立。
(2)对链表信息的插入。
(3)对链表信息的查找。
(4)对链表信息的输出。
(5)对链表信息的删除。
(6)对链表信息的修改。
课程成绩信息作为附加信息,穿插于各个模块中。
三、数据结构说明优质范文..一、自定义的数据结构:1、achieve(课程成绩)用于存放课程成绩信息包括课程数、课程名、成绩、学分、总分和平均分。
2、inform(学生基本信息)用于存放学生基本信息,包括姓名、学号、性别等。
3、结点结构-Nodetype,定义了数据域inform和指针域next;二、类Student 用于存放处理学生信息的各个功能函数,private 成员是链表的头指针。
优质范文..四、各模块设计说明一、建立:首先:建立一个空链表:Student::Student(){head=new Nodetype;表明这是一个空链表head->next=NULL;\n; 请建立链表潣瑵?}然后建立链表优质范文..:二、添加:按照学号从小到大的顺序插入:三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
C程序设计基础课程设计设计报告_链表建立学生成绩管理系统
设计题目:班级:姓名:学号:完成日期:目录目录 (1)1. 课程设计目的和要求 (1)1.1课程设计《学生成绩管理系统》的题目要求 (1)2. 课程设计任务内容 (2)2.1《学生成绩管理系统》主要功能实现方式 (2)2.1.1链表处理数据 (2)2.1.2文件读写存储学生信息 (2)2.2创建数据库管理系统(DBMS) (2)3. 详细设计说明 (3)3.1题目设计分析 (3)3.1.1需求分析 (3)3.1.2解题思路分析 (3)3.2设计过程 (3)3.2.1链表(结构体)定义 (3)3.2.2函数编写 (3)3.2.3编译与调试 (5)4. 软件使用说明 (6)4.1主界面介绍 (6)4.2创建学生信息数据表 (6)4.3增加数据信息 (6)4.4删除数据信息 (6)4.5修改信息 (6)4.6查找信息 (6)4.7统计功能 (7)5. 课程设计心得与体会 (7)5.1概述 (7)5.2心得与体会 (7)5.2.1数据库管理系统——链表+文件读写 (7)5.2.2指针与内存 (7)6. 参考文献 (8)7. 附录:部分程序清单 (8)1.课程设计目的和要求1.1课程设计《学生成绩管理系统》的题目要求学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。
系统的主要功能包括:1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。
2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。
3. 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。
4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。
C语言链表实现学生管理系统
C语⾔链表实现学⽣管理系统本⽂实例为⼤家分享了C语⾔链表实现学⽣管理系统的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<ctype.h>#include<fstream>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;typedef struct ndoe{char id[10];char name[10];char sex[3];char num[10];struct node *next;}student;struct Student{student data;struct Student *next;};/********创建学⽣信息**********/Student * insert(Student * head){Student * s,*r;head=(Student *)malloc(sizeof(Student));printf("请输⼊学⽣的个数:");int n;scanf("%d",&n);r=head;printf("按照“学号姓名性别(M or G) ⼿机号”的形式输⼊每个学⽣的信息\n");for(int i=0;i<n;i++){s=(Student *)malloc(sizeof(Student));/*scanf("%s",s->data.id);scanf("%s",s->);scanf("%s",s->data.sex);scanf("%s",s->data.num);*/scanf("%s%s%s%s",s->data.id,s->,s->data.sex,s->data.num);r->next=s;r=s;}r->next=NULL;printf("录⼊成功\n");return head;}/********增加学⽣************/void add(Student *head){Student *s;s=head->next;while(s->next!=NULL)s=s->next;Student *ad=(Student *)malloc(sizeof(Student));ad->next=NULL;s->next=ad;//printf("输⼊新学⽣的信息:\n");scanf("%s%s%s%s",ad->data.id,ad->,ad->data.sex,ad->data.num);printf("添加成功\n");return ;}/*************修改学⽣信息********************/void change(Student * head){printf("输⼊1,按学号搜索学⽣,并修改改学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并修改改学⽣的信息\n");Student * s;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("请输⼊要修改的信息:");char phone[10];scanf("%s",phone);strcpy(s->data.num,phone);printf("修改成功\n");break;}s=s->next;}break;}}return ;}/**********删除学⽣信息******************/void del(Student * head){printf("输⼊1,按学号搜索学⽣,并删除该学⽣的信息\n"); printf("输⼊2,按姓名搜索学⽣,并删除该学⽣的信息\n"); Student * s,*r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;r=head;while(s!=NULL){if(strcmp(s->data.id,number)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;r=head;while(s!=NULL){if(strcmp(s->,nam)==0){r->next=s->next;free(s);printf("删除成功\n");break;}r=s;s=s->next;}break;}}return ;}/**********查询学⽣的信息**********************/void check(Student * head){printf("输⼊1,按学号搜索学⽣,并展⽰该学⽣的信息\n");printf("输⼊2,按姓名搜索学⽣,并展⽰该学⽣的信息\n");Student * s,r;int n;scanf("%d",&n);switch(n){case 1:{printf("请输⼊学号:");char number[10];scanf("%s",number);s=head->next;while(s!=NULL){if(strcmp(s->data.id,number)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}case 2:{printf("请输⼊姓名:");char nam[10];scanf("%s",&nam);s=head->next;while(s!=NULL){if(strcmp(s->,nam)==0){printf("%s %s %s %s\n",s->data.id,s->,s->data.sex,s->data.num); break;}s=s->next;}break;}}if(s==NULL)printf("该学⽣不存在\n");return ;}int main(){Student *head=NULL;Student *a;printf("***欢迎进⼊学⽣管理系统***\n");printf("***1:请录⼊学⽣信息***\n");printf("***2:请修改学⽣信息***\n");printf("***3:请删除学⽣信息***\n");printf("***4:请查询学⽣信息***\n");printf("***5:请添加新学⽣信息**\n");printf("***6: 退出管理系统 ***\n");printf("*************************\n");printf("请输⼊命令:");int n;while(scanf("%d",&n)&&n!=6){switch(n){case 1:{printf("请录⼊学⽣信息:\n");head=insert(a);break;}case 2:{printf("请改学⽣信息:\n");change(head);break;}case 3:{cout<<"请删除学⽣信息:"<<endl;del(head);break;}case 4:{cout<<"请查询学⽣信息:"<<endl;check(head);break;}case 5:{cout<<"请添加新学⽣信息:"<<endl;add(head);break;}default :break;}printf("请继续输⼊命令:");}Student *s,*r;s=head->next;while(s!=NULL){r=s->next;free(s);s=r;}free(head);return 0;}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
链表实现学生信息管理
实验2利用单链表实现学生信息管理1.实验目的·掌握单链表结构的实现方式;掌握单链表常用算法的实现;·熟悉利用单链表解决问题的一般思路;了解单链表结构的优点与不足。
2.实验内容与要求以学生信息为数据结点建立带头结点的单链表。
一个结点的信息包括学号、姓名、性别、班级和联系电话。
程序用户可通过数字键选择信息浏览、插入信息、修改信息、删除信息等功能。
对程序的具体要求如下:(1)程序启动后,显示下列选项信息:1—信息浏览2—插入信息3—删除信息4-修改信息0—退出程序(2)输入数字“1”显示所有学生信息列表。
(3)输入数字“2”进入插入信息功能模块。
程序依次提示并由用户输入学号、姓名、性别、班级和联系电话,最终实现在线性表头部插入一个学生信息。
(4)输入数字“3”进入删除信息功能模块。
程序提示并由用户输入学号,最终实现按照学号删除某个学生信息。
(5)输入数字“4”进入修改信息功能模块。
程序提示并由用户输入学号,最终实现按照学号修改某个学生信息。
(6)通过输入数字“0”使得程序结束。
(7)当用户执行浏览、插入、删除功能后,程序应继续提示用户通过数字键选择相应功能,直到用户输入数字“0”程序才结束。
3.实验编程指导(1)可仿照本章单链表的定义形式,建立学生信息结点数据,并建立一个空的单链表。
(2)参考本章中单链表的算法描述和例题中的算法实现,在本程序中增加信息浏览、插入结点、删除结点、修改结点内容的算法实现函数。
(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(4)完善插入、删除功能。
实现插入信息的录入、删除记录的定位等细节。
并完善用户操作界面,给出详细的操作提示。
5.实验报告要求实验报告要求以word文件形式发到老师邮箱。
内容包括:(1)报告封面包括实验名称、班级、姓名、学号以及实验完成日期。
(2)各程序模块名称及功能说明。
并绘制出主要功能函数的程序流程图。
链表实现学生学籍管理系统
#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 15 //学号位数#define M 15 //姓名字节数#define L 4 //成绩的科数int aa=0;//记录筛选时打开的文void printf_(struct stu *); //输出单个的学生数据struct stu * scanf1_(); //接收单个的学生数据,返回指针,struct stu * scanf_(); //得到学生的数据,并放入到链表中void print_(struct stu *); //输出链表中的学生信息struct stu *num_paixu(struct stu *); //用链表给学生排序void chaxun(struct stu *); //根据学生的学号查询学生的信息,并把学生的数据输出struct stu * charu(struct stu *); //将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
struct stu * shanchu(struct stu *); //删除数据void xiugai(struct stu *); //修改学生的信息。
void fprint_(struct stu *); //把数据写入到文件int to_ji(struct stu *); //统计学生的总人数int t_ji_tj(struct stu *); //统计成绩在某一区间内的人数struct stu * ch_ji_paixu(struct stu *); //按成绩排序,默认的是按总成绩排序struct s *shaixuan(struct stu *); //筛选符合条件的数据,得到符合条件的结构体数据的指针。
void shuchu_shai(struct s *); //输出筛选出来的数据void fb_shu_shai(struct s *); //将筛选出来的数据输入到文件中void avrage(struct stu *head,float *); //计算平均成绩void fb_avrage(float *); //将平均成绩放在文件的最后面//建立学生结构体struct stu{char num[N];char name[M];int ch_ji[L];struct stu *next;};//建立一个链表,存放学生结构体的指针struct s{struct stu *p;struct s *ps;};void main(){int i,n,x=1,k=0;float a[L]={0};struct stu *head=NULL;struct s *shead=NULL;char ch;while(x){ system("cls");printf("********************************************************************* **********\n");printf(" 0---退出系统1---录入数据\n");printf(" 2---保存文件3---按成绩排序\n");printf(" 4---查看信息5---按学号排序\n");printf(" 6---统计人数7---按条件筛选\n");printf(" 8---查询信息9---显示筛选结果\n");printf(" 10---插入数据11---保存筛选结果\n");printf(" 12---删除数据13---计算平均成绩\n");printf(" 14---修改数据15---保存平均成绩\n");printf(" 16---按条件统计人数\n");printf("********************************************************************* **********\n");scanf("%d",&n);getchar();//有啥作用switch(n){case 0:x=0;break;case 1:head=scanf_();break;case 2:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsefprint_(head);break;case 3:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=ch_ji_paixu(head);break;}case 4:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elseprint_(head);break;case 5:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=num_paixu(head);printf("是否显示排序结果Y/N ?");ch=getchar();getchar();if(ch=='y'||ch=='Y'){printf("\n");print_(head);}}case 6:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=to_ji(head);printf("总共有%3d 名学生",k);getchar();break;}case 7:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{shead=shaixuan(head);if(shead!=NULL&&shead->ps!=NULL){printf("是否显示筛选结果Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n");shuchu_shai(shead);getchar();}}break;}case 8:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();}else{chaxun(head);getchar();break;}case 9:if(head==NULL||head->next==NULL) {printf("请先录入学生的数据!");getchar();break;}else{printf("\n");shuchu_shai(shead);getchar();break;}case 10:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}elsehead=charu(head);break;case 11:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_shu_shai(shead);getchar();break;}if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{head=shanchu(head);break;}case 13:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{avrage(head,a);printf("平均值计算成功!\n是否显示平均成绩Y/N ?");ch=getchar();if(ch=='y'||ch=='Y'){printf("\n 语文数学英语总成绩\n");printf("%-8.2f%-8.2f%-8.2f%-8.2f",a[0],a[1],a[2],a[L-1]);getchar();}break;}case 14:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{xiugai(head);break;}case 15:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{fb_avrage(a);printf("平均值保存成功!");getchar();break;}case 16:if(head==NULL||head->next==NULL){printf("请先录入学生的数据!");getchar();break;}else{k=t_ji_tj(head);if(k>0){printf("符合条件的有%3d 名学生!",k);getchar();}else if(k==0){printf("没有符合条件的学生!");getchar();}else if(k==-2)getchar();break;}default :printf("输入有误,请重新输入!");getchar();break;}}}//输出单个的学生数据void printf_(struct stu *p0){int i;printf("学号:");puts(p0->num);printf("姓名:");puts(p0->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p0->ch_ji[i]);printf("\n");}//接收单个的学生数据,返回指针,struct stu * scanf1_(){int i,sum=0;struct stu *p0;p0=(struct stu *)malloc(sizeof(struct stu));printf("请输入学生的学号:");gets(p0->num);printf("请输入学生的姓名:");gets(p0->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p0->ch_ji[i]);sum+=p0->ch_ji[i];}getchar();p0->ch_ji[L-1]=sum;return p0;}//得到学生的数据,并放入到链表中struct stu * scanf_(){struct stu *p1,*p2,*head;int i,sum=0,n=0;printf("注意:当学生学号为0 时输入结束\n\n");p1=(struct stu *)malloc(sizeof(struct stu)); /*得到学生信息*/head=p2=p1;do{ printf("请输入学生的学号:");gets(p1->num);if(strcmp(p1->num,"0")==0)break;printf("请输入学生的姓名:");gets(p1->name);printf("请输入学生的三科成绩(语文、数学、英语):");for(i=0;i<L-1;i++){scanf("%d",&p1->ch_ji[i]);sum+=p1->ch_ji[i];}getchar();printf("\n");p1->ch_ji[L-1]=sum;sum=0;p1=(struct stu *)malloc(sizeof(struct stu));p2->next=p1;p2=p1;n++;}while(1);p1->next=NULL;printf("成绩输入结束!\n");getchar();/*学生的数据被放在链表中*/return head;}/*输出链表中的学生信息*/void print_(struct stu *head){int i;struct stu *p1,*p2;p1=p2=head;while(p1->next!=NULL){printf("学号:");puts(p1->num);printf("姓名:");puts(p1->name);printf("语文数学英语总成绩\n");for(i=0;i<L;i++)printf("%-8d",p1->ch_ji[i]);printf("\n");p1=p2->next;p2=p1;}getchar();}/*用链表给学生排序*/struct stu *num_paixu(struct stu *head){struct stu *p1,*p2,*p3,*p4,*p5,*p6,*p7;int x=1;for(p1=head;p1->next!=NULL;p4=p1,p1=p1->next){p3=p1;for(p2=p1->next,p5=p7=p2;p2->next!=NULL;p7=p2,p2=p2->next){if(strcmp(p3->num,p2->num)>0){p3=p2;p5=p7;}}if(p3!=p1){if(x&&p1==head){p6=p1->next;p1->next=p3->next;p3->next=p6;p5->next=p1;head=p3;p1=p3;x=0;}else{p6=p1->next;p1->next=p3->next;p3->next=p6;p4->next=p3;p5->next=p1;p1=p3;}}printf("排序成功!\n");return head;}//根据学生的学号查询学生的信息,并把学生的数据输出void chaxun(struct stu *head){char a[N];struct stu *p1;printf("请输入要查询的学号:");gets(a);p1=head;while(p1->next!=NULL){if(strcmp(p1->num,a)==0)break;p1=p1->next;}if(p1->next==NULL)printf("没有找到学号为%s 的学生!\n",a);else{printf("要查询的学生信息如下:\n\n");printf_(p1);}}//将学生的数据插入到顺序排放的链表中,并且插入后也是顺序排放的。
C语言写的学生成绩管理系统(链表)
#include<stdio.h>#include<string.h>#include<stdlib.h>struct stud{long num;char name[20];float sx;float dx;float ts;float dl;float cx;float zf;float pj;};struct studcode{struct stud student;struct studcode *next;};void menu();void input(struct studcode **);void output(struct studcode *);void binsearch(struct studcode *);void insert(struct studcode **);void delet(struct studcode **);void good(struct studcode *);void fail(struct studcode *);void sort(struct studcode *);void back();void main(){char choose;int flag=1;struct studcode *head;head=NULL;printf("请先录入学生成绩信息\n");printf("输入学生学号姓名高数、英语读写、英语听说、计算机导论和程序设计的成绩\n");input(&head);while (flag){system("cls");menu();printf("请选择:");getchar();choose=getchar();switch(choose){case '1':output(head);back();break;case '2':binsearch(head);back();break;case '3':insert(&head);output(head);back();break;case '4':delet(&head);output(head);back();break;case '5':good(head);back();break;case '6':fail(head);back();break;case '7':sort(head);output(head);back();break;case '0':flag=0;printf("\n *** The End! ***\n");printf("\n ####感谢使用,欢迎再次登录,拜拜!####\n");break;default: printf("\n Wrong Selection !(选择错误,请重选)\n");back();}}}void menu(){printf(" \n 学生成绩统计与分析系统\n");printf(" \n 菜单\n\n");printf(" \n 1. 显示所有学生的信息\n");printf(" \n 2. 查找某学号的学生信息\n");printf(" \n 3. 插入某学生的信息 \n");printf(" \n 4. 删除某学号学生的信息\n");printf(" \n 5. 统计各门课程成绩在90分以上学生所占百分比\n");printf(" \n 6. 统计各门课程成绩在60分以下学生所占百分比 \n");printf(" \n 7. 按总分降序排序,依高低排出名次 \n");printf(" \n 0. 退出 \n\n");}void back(){int x;printf("\n");do{printf("按1返回菜单界面:");scanf("%d",&x);}while(x!=1);}void input(struct studcode **headp){struct studcode *p;while(1){p=(struct studcode *)malloc(sizeof(struct studcode));scanf("%ld",&p->student.num);if(p->student.num==0) break;scanf("%s%f%f%f%f%f",&p->,&p->student.sx,&p->student.dx,&p->stu dent.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;}}void output(struct studcode *head){struct studcode *p;p=head;printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");while(p!=NULL){printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\ n",p->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p-> student.dl,p->student.cx,p->student.zf,p->student.pj);p=p->next;}printf("\n");}void binsearch(struct studcode *head){struct studcode *p;int k=1;long x;p=head;printf("请输入需要查找的学生的学号:");scanf("%ld",&x);printf("\n");while(p!=NULL){if(p->student.num==x){printf("该学生信息如下:\n");printf("学号\t姓名\t高数\t读写\t听说\t导论\t程序\t总分\t平均分\n");printf("%-ld\t%-4s\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",p ->student.num,p->,p->student.sx,p->student.dx,p->student.ts,p->student.dl,p->stude nt.cx,p->student.zf,p->student.pj);k=0;break;}p=p->next;}if(k) printf("没有此学生的信息\n");}void insert(struct studcode **headp){struct studcode *p;p=(struct studcode *)malloc(sizeof (struct studcode));printf("请输入你想插入的学生的信息\n");scanf("%ld%s%f%f%f%f%f",&p->student.num,&p->,&p->student.sx,&p->student.dx,&p->student.ts,&p->student.dl,&p->student.cx);p->student.zf=p->student.sx+p->student.dx+p->student.ts+p->student.dl+p->st udent.cx;p->student.pj=p->student.zf/5;p->next=*headp;*headp=p;printf("*****插入成功*****\n");}void delet(struct studcode **headp){struct studcode *p,*last;long x;p=*headp;printf("请输入你要删除的学生的学号:");scanf("%ld",&x);while(p->student.num!=x&&p->next!=NULL){last=p;p=p->next;}if(p->student.num==x){if(p==*headp)*headp=p->next;elselast->next=p->next;free(p);printf("\n*****删除成功*****\n");}else printf("\n***删除失败,无该学生信息***\n");}void good(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx>=90) x1++;if(p->student.dx>=90) x2++;if(p->student.ts>=90) x3++;if(p->student.dl>=90) x4++;if(p->student.cx>=90) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void fail(struct studcode *head){struct studcode *p;int x1,x2,x3,x4,x5,k;float y1,y2,y3,y4,y5;x1=x2=x3=x4=x5=k=0;p=head;while(p!=NULL){k++;if(p->student.sx<60) x1++;if(p->student.dx<60) x2++;if(p->student.ts<60) x3++;if(p->student.dl<60) x4++;if(p->student.cx<60) x5++;p=p->next;}y1=(float)x1/k;y2=(float)x2/k;y3=(float)x3/k;y4=(float)x4/k;y5=(float)x5/k;printf("高数\t读写\t听说\t导论\t程序\n");printf("%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\t%-0.2f\n",y1,y2,y3,y4,y5); }void sort(struct studcode *head){struct stud temp;int i,j,n;struct studcode *p,*p1,*p2;n=0;p=head;while(p!=NULL){n++;p=p->next;}for(p1=head,i=0;i<n-1;i++,p1=p1->next)for(p2=p1->next,j=i+1;j<n;j++,p2=p2->next)if(p1->student.zf<p2->student.zf){temp=p2->student;p2->student=p1->student;p1->student=temp;}printf("\n*****排序成功*****\n"); }。
c语言程序设计报告-链表实现学生信息管理
C语言课程设计报告链表实现学生信息管理一.课程设计目标C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。
本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。
结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。
通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。
另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。
二.设计项目:学生学籍管理该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。
它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。
主要功能模块:1. 浏览学生信息:显示学生的信息。
2. 插入学生信息:添加学生的信息。
3. 删除学生信息:通过输入学号删除学生的信息。
4. 修改学生信息:通过输入学号修改学生的信息。
5. 保存学生信息:将学生信息保存到文件。
0. 退出系统:结束程序的运行,结束前询问是否保存信息。
三.具体任务由老师提供主菜单程序以及第0、2个模块。
学生在这个信息系统中加入四个模块,即:1. 浏览学生信息3. 删除学生信息4. 修改学生信息5. 保存学生信息四、详细介绍1、浏览学生信息2、插入学生信息3、删除学生信息4、修改学生信息5、信息的写入读出6、学生信息的保存与释放五、课程设计实践小节这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。
在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
链表的使用在今后的程序设计中尤为关键,他可以保存、调用和更改数据,在信息时代的程序设计中很重要。
在这次的程序设计中,老师和同学都是我强大的后盾。
C语言学生管理系统(链表)
学生管理系统#define_CRT_SECURE_NO_WARNINGS#include〈stdio。
h〉#include<stdlib。
h〉#include〈string.h〉void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//添加数据void DisplayNode(struct link*head);//显示数据void InsertNode(long long studentID,char studentName[10],char studentSex[4],int score[4]);//插入一条数据;按总分的从大到小排序void InsertNodeNumber(long long studentID,char studentName [10],char studentSex[4],int score[4]);//按学号的从小到大排序void NumberSorting(int flag);//按从大到小对数据进行排序;1、对总分进行排序,2、对学号进行排序void DeleteNodeID();//输入学号删除void DeleteNodeName();//输入学号删除void DeleteMemory(struct link*head);//删除聊表所占用的内存;void Save();//保存数据void Open();//打开数据void FindID();//按学号查找学生void FindName();//按姓名查找学生;void Menu();typedef struct student{long long studentID;char studentName[10];char studentSex[4];int score[4];}STU;struct link{STU student;struct link*next;};struct link*head=NULL;//保存输入的学生信息数据struct link*head1=NULL;//保存排序后的学生信息数据int main(){long long studentID;char studentName[10];char studentSex[4];int score[4];//定义要输入学生信息的变量;char c;int menu;//保存要进行的选项;Open();while(1){system(”pause”);Menu();printf(”请输入要进行的操作:");scanf("%d”,&menu);switch(menu){case0:exit(0);break;case1:printf(”请输入Y或y来添加数据\n”);scanf(” %c”,&c);while(c==’y’||c=='Y’){printf("请输入学生学号:");scanf("%lld”,&studentID);printf("请输入学生姓名:”);scanf(”%s”,&studentName);printf(”请输入学生性别:");scanf("%s",&studentSex);int i=0;printf("请分别输入学生四门课的成绩:");for(i=0;i〈4;i++){scanf(”%d”,&score[i]);}AppendNode(studentID,studentName,studentSex, score);printf(”请输入Y或y来添加数据\n”);scanf(”%c",&c);}DisplayNode(head);break;case2:FindID();break;case3:FindName();break;case4:DeleteNodeID();break;case5:DeleteNodeName();case6:NumberSorting(1);DeleteMemory(head1);head1=NULL;break;case7:NumberSorting(2);DeleteMemory(head1);head1=NULL;break;default:printf("输入有误!请重新输入”);}}Save();DeleteMemory(head);DeleteMemory(head1);system("pause”);}void AppendNode(long long studentID,char studentName[10],char studentSex[4],int score[4]){struct link*p=NULL,*pr=head;p=(struct link*)malloc(sizeof(struct link));if(p==NULL){printf("申请内存失败");return;}if(head==NULL){head=p;}else{while(pr—>next!=NULL){pr=pr—〉next;}pr->next=p;}p->student.studentID=studentID;strcpy(p—>student.studentName,studentName);strcpy(p->student.studentSex,studentSex);p-〉student.score[0]=score[0];p—〉student。
C语言链表实验报告
链表实验报告一、实验名称链表操作的实现--学生信息库的构建二、实验目的(1)理解单链表的存储结构及基本操作的定义(2)掌握单链表存储基本操作(3)学会设计实验数据验证程序【实验仪器及环境】计算机 Window XP操作系统三、实验内容1、建立一个学生成绩信息(学号,姓名,成绩)的单链表,按学号排序2、对链表进行插入、删除、遍历、修改操作。
3、对链表进行读取(读文件)、存储(写文件)四、实验要求(1)给出终结报告(包括设计过程,程序)-打印版(2)对程序进行答辩五、实验过程、详细内容1、概念及过程中需要调用的函数(1)链表的概念结点定义结构的递归定义struct stud_node{int num;char name[20];int score;struct stud_node *next;};(2)链表的建立1、手动输入struct stud_node*Create_Stu_Doc(){struct stud_node *head,*p;int num,score;char name[20];int size=sizeof(struct stud_node);【链表建立流程图】2、从文件中直接获取 先建立一个(3)链表的遍历(4(5)删除结点(6)动态储存分配函数malloc () void *malloc(unsigned size)①在内存的动态存储区中分配一连续空间,其长度为size②若申请成功,则返回一个指向所分配内存空间的起始地址的指针 ③若申请不成功,则返回NULL (值为0) ④返回值类型:(void *) ·通用指针的一个重要用途·将malloc 的返回值转换到特定指针类型,赋给一个指针【链表建立流程图】ptrptrptr->numptr->score ptr=ptr->nexthead pt rs s->next = ptr->next ptr->next = s 先连后断 ptr2=ptr1->nextptr1->next=ptr2->nextfree (ptr2)(7)动态储存释放函数free()当某个动态分配的存储块不再用时,要及时将它释放void free(void *ptr)释放由动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。
链表实现学生信息菜单管理系统
链表实现学生信息菜单管理系统-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII实验名称:链表实现学生信息菜单管理系统一、实验目的:1、掌握顺序表结构的实现方式;2、掌握顺序表常用算法的实现;3、熟悉利用顺序表解决问题的一般思路;4、参照给定的顺序表的程序样例,验证给出的顺序表的常见算法,领会顺序表结构的优点和不足。
二、实验内容:1、编程完成顺序表的基本操作:建立、删除、查找及显示。
2、按要求完成学生名册管理程序的编写和调试。
三、实验结果:1、创建:2、删除:3、添加:4、退出:四、实验中遇到的问题及解决方法:问题一:地址传递出错解决方案:参考网上资料代码。
问题二:创建时,停止暂停解决方案:输入学号为零时停止输入问题三:创建时需要学号姓名成绩都为零才能停止创建解决方案:占无解决方案五、实验心得体会:链表中指针的使用要注意指针的性质,确保地址正确传递,要改变的值正确改变。
在编程过程中很容易出现地址传递出错的问题,需要有耐心慢慢排查故障,解决故障。
通过本次实验让我明白了链表的操作使用,加深了我对链表的理解,同时也通过不断地练习提高了编程能力,链表的掌握对于这门课程而言十分重要,在今后的学习中,我需要更加努力,才能更好的掌握和使用链表。
源代码:#include <stdlib.h>#include <stdio.h>#define NULL 0#define LEN sizeof(struct student)struct student{int num;char name[20];float score;struct student *next;};int n;struct student *Create(){struct student *head;struct student *p1 = NULL;struct student *p2 = NULL;n = 0;p1 = (struct student *) malloc (LEN);p2 = p1;if(p1==NULL){printf ("\nCann't create it, try it again in a moment!\n");return NULL;}else{head = NULL;printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}while(p1->num != 0){n += 1;if(n == 1){head = p1;p2->next = NULL;}else{p2->next = p1;}p2 = p1;p1 = (struct student *) malloc (LEN);printf("请输入第%d个学生学号姓名成绩:\n",n+1);scanf("%d %s %f",&(p1->num),p1->name,&(p1->score));}p2->next = NULL;free(p1);p1 = NULL;return head;}void Print(struct student *head){struct student *p;printf ("\nNow , These %d records are:\n", n);p = head;if(head != NULL){printf("head is %o\n", head);do{printf ("%d\t%s\t%5.1f\n", p->num, p->name, p->score);p = p->next;}while (p != NULL);}}struct student *Del (struct student *head, int num){struct student *p1;struct student *p2;if (head == NULL){printf ("\nList is null!\n");return head;}p1 = head;while (p1->num != num && p1->next != NULL){p2 = p1;p1 = p1->next;}if(p1->num==num){if (p1 == head){head = p1->next;}else{p2->next = p1->next;}free (p1);p1 = NULL;printf ("\ndelete %ld success!\n", num);n -= 1;}else{printf ("\n%ld not been found!\n", num);}return head;}struct student *Insert (struct student *head, int num, struct student *node) {struct student *p1;if (head == NULL){head = node;node->next = NULL;n += 1;return head;}p1 = head;while(p1->num != num && p1->next != NULL){p1 = p1->next;}if (p1->num==num){node->next = p1->next;p1->next = node;n += 1;}else{printf ("\n%ld not been found!\n", num);}return head;}int main(void){struct student *head;struct student *stu;int thenumber;int command,flag=1;while(flag){printf("1、创建管理系统\n2、删除学生信息\n3、添加学生信息\n4、退出\n");printf("当学号姓名成绩都为0时,停止创建\n");printf("输入指令:");scanf("%d",&command);switch(command){case 1:{head = Create();Print(head);break;}case 2:{printf("\nWhich one delete: ");scanf("%d",&thenumber);head = Del(head,thenumber);Print(head);break;}case 3:{stu = (struct student *)malloc(LEN);printf("请输入第%d个学生学号,姓名,成绩:\n",n+1);scanf("%d %s %f",&(stu->num),stu->name,&(stu->score));printf("\n插到哪个学号后面: ");scanf("%d",&thenumber);head = Insert(head,thenumber,stu);Print(head);break;}case 4:flag=0;}}}。
学生管理系统 C语言 链表实现
实验二实验项目名称:线性表的基本操作实验项目的和要求:1.掌握线性表的特点2.掌握线性表的顺序存储结构和链式存储结构的基本运算。
3.尽可能考虑算法的健壮性4.实验报告中要写出测试数据、错误分析以及收获。
上机实验内容四:运动会记分子系统或学生成绩管理子系统1.参加运动会的N个学校编号为1~N。
比赛分成M个男子项目和W个女子项目,每个项目取前3名,得分分别为5,3,2。
写一个程序产生各种成绩单和得分报表。
2.完成功能包括如下:①产生一总成绩表,包括:系名、男子团体总分、女子团体总分、团体总分存储结构要求用线性表的顺序存储。
②实验报告中要写出测试数据、错误分析以及收获。
③若选择学生成绩管理子系统,可仿照运动会记分子系统完成相关的插入、删除、查找及各种统计工作。
实验代码如下:#include<stdio.h>#include<malloc.h>#include<ctype.h>#include<conio.h>#define null 0#define length sizeof(struct student)struct student{int stuid;char stuname[20];char stusex[2];float english;float math;float database;float sum;float average;struct student *next;};struct student * Insert(int n){struct student *head,*p1,*p2;for(int i=0;i<n;i++){if(i==0){printf(" **************************************\n");printf(" ** 请输入第%d个学生的信息**\n",i+1);printf(" **************************************\n");p1=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p1->stuid);printf(" 请输入学生的姓名:");scanf("%s",p1->stuname);printf(" 请输入学生的性别:");scanf("%s",p1->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p1->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p1->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p1->database);p1->sum=p1->english+p1->math+p1->database;p1->average=p1->sum/3;head=p1;p1->next=null;}else{printf(" **************************************\n");printf(" ** 请输入第%d个学生的信息**\n",i+1);printf(" **************************************\n");p2=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p2->stuid);printf(" 请输入学生的姓名:");scanf("%s",p2->stuname);printf(" 请输入学生的性别:");scanf("%s",p2->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p2->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p2->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p2->database);p2->sum=p2->english+p2->math+p2->database;p2->average=p2->sum/3;p1->next=p2;p1=p2;p2->next=null;}}return head;}void Sinsert(struct student *head){struct student *p1,*p2;p2=head;p1=(struct student *) malloc(sizeof(struct student));printf(" 请输入学生的学号:");scanf("%d",&p1->stuid);printf(" 请输入学生的姓名:");scanf("%s",p1->stuname);printf(" 请输入学生的性别:");scanf("%s",p1->stusex);printf(" 请输入学生的英语成绩:");scanf("%f",&p1->english);printf(" 请输入学生的高数成绩:");scanf("%f",&p1->math);printf(" 请输入学生的数据结构成绩:");scanf("%f",&p1->database);p1->sum=p1->english+p1->math+p1->database;p1->average=p1->sum/3;if(head==null){head=p1;p1->next=null;}else{while(p2->next!=null){p2=p2->next;}if(p2->next!=null){p1->next=p2->next;p2->next=p1;}else{p2->next=p1;p1->next=null;}}}void println(){printf(" ************************************************\n");printf(" * 欢迎使用学生管理系统*\n");printf(" ************************************************\n");printf("********************************************************************* ***********\n");printf("**** 1.批量添加学生信息************************** 2.插入单个学生****\n");printf("**** 3.查找某个学生************************** 4.删除某个学生****\n");printf("**** 5.按成绩进行排名************************** 6.显示各科最高分****\n");printf("**** 7.各科均分及及格率************************** 8 退出管理系统****\n");printf("********************************************************************* ***********\n\n");printf("-------------------提示:先进行批量添加,再单个插入———————————————\n");printf("-------------------使用单个插入后不允许再批量添加--------------------------------\n");}void Delete(struct student *head,int num){struct student *p,*q;p=head;if(head==null){printf(" ##########友情提示,没有可删除的学生!############ \n\n");}while(p->stuid!=num&&p->next!=null){q=p;p=p->next;}if(p->stuid==num){if(p==head){head=p->next;}else{q->next=p->next;}printf(" #############被删除学生的信息#############\n\n");printf("--------------------------------------------------------------------------------");printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f\n\ n",p->stuid,p->stuname,p->stusex,p->english,p->math,p->database,p->sum,p->average,p->sum,p ->average);printf("--------------------------------------------------------------------------------");free(p);}else{printf(" #########友情提示!找不到该用户的资料!##########\n\n");}}void Search(struct student *head,int num){struct student *p;p=head;if(p==null){printf(" ##########友情提示!链表为空##########\n\n");}else{while(p!=null){if(p->stuid==num){printf("--------------------------------------------------------------------------------");printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f\n\ n",p->stuid,p->stuname,p->stusex,p->english,p->math,p->database,p->sum,p->average,p->sum,p ->average);printf("--------------------------------------------------------------------------------");}else{printf(" ##########友情提示!没有该用户的信息##########\n\n");}p=p->next;}}}void class_average(struct student *head){struct student *p1;p1=head;float i=0,e=0,m=0,d=0;if(p1==null){printf(" ##########友情提示,该系统中没有用户!!############");}float english1=0,math1=0,database1=0;while(p1!=null){i++;english1=english1+p1->english;if(p1->english>=60){e++;}math1= math1+ p1->math;if(p1->math>=60){m++;}database1=database1+ p1->database;if(p1->database>=60){d++;}p1=p1->next;}float ave1=english1/i;float ave2=math1/i;float ave3=database1/i;printf(" ************************************************\n");printf(" * 各科均分及及格率的查询*\n");printf("************************************************\n\n");printf("--------------------------------------------------------------------------------");printf(" 英语高数数据结构\n\n");printf(" 均分: %6.1f %6.1f %6.1f \n\n " , ave1, ave2 , ave3 );printf(" 及格率: %6.1f%% %6.1f%% %6.1f%%\n\n", e/i*100, m/i*100, d/i*100);printf("--------------------------------------------------------------------------------");}void Result_sort(struct student *head){int i=0;struct student *end;struct student *p;struct student *p1;struct student *p2;struct student *p3;p1 = (struct student *)malloc(length);p1->next = head;head = p1;for (end=null; end!=head; end=p){for (p=p1=head; p1->next->next!=end; p1=p1->next){if (p1->next->sum <p1->next->next->sum){p2 = p1->next->next;p1->next->next = p2->next;p2->next = p1->next;p1->next = p2;p = p1->next->next;}}}p1= head;head = head->next;free(p1);p3=head;printf(" 学号姓名性别英语高数数据结构总分平均分\n\n");printf("--------------------------------------------------------------------------------");while(p3!=null){printf(" %d %s %s %6.1f %6.1f %6.1f %6.1f %6.1f %d\n\n",p3->stuid,p3->stuname,p3->stusex,p3->english,p3->math,p3->database,p3->sum,p3->average,p 3->sum,p3->average);p3=p3->next;}printf("-------------------------------------------------------------------------------");}void show_max(struct student *head){printf(" ************************************************\n");printf(" * 各科最高分学生信息*\n");printf(" ************************************************\n");printf("--------------------------------------------------------------------------------");struct student *p1,*p2,*p3;float max1=0,max2=0,max3=0;for(p1=head;p1->next!=null;p1=p1->next){if(p1->english>p1->next->english){max1=p1->english;}else{max1=p1->next->english;}}for(p2=head;p2->next!=null;p2=p2->next){if(p2->math>p2->next->math){max2=p2->math;}else{max2=p2->next->math;}}for(p3=head;p3->next!=null;p3=p3->next){if(p3->database>p3->next->database){max3=p3->database;}else{max3=p3->next->database;}}printf(" 英语: %6.1f \n\n",max1);printf(" 高数: %6.1f \n\n",max2);printf(" 数据结构: %6.1f \n\n",max3);printf("--------------------------------------------------------------------------------");}void main(){println();struct student *head;while(1){printf(" ##########请输入您要进行的操作###########\n\n");int i;scanf("%d",&i);switch(i){case 1:int n;printf(" ########请输入您要批量的个数:###########\n\n");scanf("%2d",&n);head=Insert(n);break;case 2:Sinsert(head);break;case 3:int num2;printf(" #########请输入要查找学生的学号:##########\n\n");scanf("%10d",&num2);Search(head,num2);break;case 4:int num1;printf(" #########请输入要删除学生的学号###########\n\n");scanf("%10d",&num1);Delete(head,num1);break;case 5:Result_sort(head);break;case 6:show_max(head);break;case 7:class_average(head);break;case 8:printf("**************************************\n");printf(" ##########感谢您使用---再见###########\n");printf("**************************************\n");return;break;}}}分工:裴耀耀:1,3模块吴佳东:2,4模块武立峰:6,7模块楼玉双:5,8模块实验测试数据:实验总结:1.熟练了对链表的操作2.学会了对链表的冒泡排序3.掌握了链式存储结构的特点。
c课程设计报告链表
c课程设计报告链表一、教学目标本课程的教学目标是使学生掌握链表的基本概念、实现方式和应用场景。
具体包括:1.知识目标:学生能够理解链表的定义、特点和基本操作,了解单向链表、双向链表和循环链表的区别和应用。
2.技能目标:学生能够使用编程语言实现链表,包括创建、插入、删除和遍历等基本操作。
3.情感态度价值观目标:通过学习链表,培养学生对计算机科学的兴趣和热情,提高学生的问题解决能力和创新意识。
二、教学内容本课程的教学内容主要包括链表的基本概念、实现方式和应用场景。
具体包括:1.链表的定义和特点:介绍链表的定义、特点和基本操作。
2.单向链表:讲解单向链表的实现方式和相关操作,如创建、插入、删除和遍历。
3.双向链表:介绍双向链表的概念和实现方式,讲解双向链表的相关操作,如创建、插入、删除和遍历。
4.循环链表:讲解循环链表的定义和实现方式,介绍循环链表的应用场景。
5.链表的应用:介绍链表在实际应用中的例子,如链表的数据结构、链表的排序和查找等。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,包括:1.讲授法:通过讲解链表的基本概念、实现方式和应用场景,使学生掌握链表的知识。
2.讨论法:学生进行小组讨论,探讨链表的操作方法和实现细节,促进学生的思考和交流。
3.案例分析法:通过分析实际应用中的链表例子,使学生了解链表在实际中的应用场景和效果。
4.实验法:安排学生进行编程实验,实现链表的基本操作,培养学生的动手能力和问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将使用以下教学资源:1.教材:选择一本与链表相关的教材,作为学生学习的主要参考资料。
2.参考书:提供一些与链表相关的参考书籍,供学生深入学习和研究。
3.多媒体资料:制作一些与链表相关的多媒体课件和演示视频,帮助学生更好地理解和掌握链表的知识。
4.实验设备:提供计算机和相关编程工具,供学生进行编程实验和实践。
五、教学评估本课程的评估方式包括平时表现、作业和考试等。
链表和C语言—学生信息管理系统
int cl;
Technode *tmp;
printf("输入要查找的班级: ");
scanf("%d", &cl);
printf("\n序号\t姓名\t密码\t所任班级\n");
for(tmp = head;tmp != NULL;tmp = tmp->next)
{
if(tmp->data.clas == cl)
if(i >= 1 && i <= 12)
{
j = 1;
break;
}
else
{
j = 0;
printf("输入错误\n");ห้องสมุดไป่ตู้
break;
}
}
while(j == 1)
{
switch(i)
{
case 1:debug_prt1(L1);ad_main();break;
case 2:ad_cz(L1);break;
while(i < 3)
{
if(i > 0)
{
printf("请重新输入\n");
}
printf("请输入用户名: ");
scanf("%s",str);
getchar();
printf("请输入密码: ");
scanf("%s",str1);
getchar();
if((strcmp(str,"admin") == 0)&&(strcmp(str1,"admin") == 0))
c语言学生成绩管理系统(链表版)
#include <stdio。
h〉#include 〈stdlib.h>#include 〈string。
h>#include 〈conio.h〉#include 〈windows.h〉#include 〈ctype。
h〉#define YES 1#define NO 0typedef struct{int num;float math_score;float engl_score;float chin_score;float phy_score;float chem_score;double aver_score;double sum_score;char sex;}StudentDate;//学生基本信息typedef struct student{char name[20];//学生姓名StudentDate one;//学生其他信息int rank;//成绩排名struct student *next;}Student, *List;Student *startCheck(void);//开始检查Student *createListHead(void);//创建链表的头void menu(void);//主菜单void sortList(Student *pHead);//排序链表void readListWithFile(Student *pHead,char *file_name);//从文件中读取数据,并保存在链表中void sorttList(Student *pHead);//排序链表int userChioce(Student *pHead);//用户选择int sortMenu(void);//打印选择菜单void passwordCheck(void);//密码检测void correctWord(void);//修改密码void addStudentInfo(Student *pHead);//向链表的末尾添加数据int scanMenu(void);//浏览菜单void findStudentInfo(Student *pHead);//查找学生信息void delStudentInfo(Student *pHead);//删除某一个学生信息void alterStudentInfo(Student *pHead);//修改学生信息void saveList(Student *pHead);//将链表保存在文件里void printList(Student *pHead);//打印链表void statisStudentInfo(Student *pHead);//查看学生信息int statisMenu(void);//查看菜单void gotoxy(int x, int y);//改变光标位置函数void inputData(Student *pHead,Student *node);//输入信息,并检测是否合法int main(void){Student *pHead;HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//得到窗口句柄SMALL_RECT rc = { 0, 0, 94 —1,30 - 1 };//{Y位置,X位置,宽,高}SetConsoleWindowInfo(hOut, true,&rc);// 重置窗口位置和大小system("color 5B");//设置控制台颜色pHead = startCheck();//读取信息while (1){if (9 == userChioce(pHead))//按9时退出系统{break;}}return 0;}void menu(void){system(”CLS”);//清屏printf(”\n\n\n\t\t\t\t┌─────────────────┐\n”);printf("\t\t\t\t│学生成绩统计系统│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 1 增加学生记录│\n”);printf("\t\t\t\t├─────────────────┤\n");printf("\t\t\t\t│ 2 删除学生记录│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 3 修改学生记录│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 4 查找学生信息│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│ 5 统计学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│ 6 查看学生成绩│\n");printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│7 修改登陆密码│\n”);printf(”\t\t\t\t├─────────────────┤\n”);printf("\t\t\t\t│8 关于│\n”);printf("\t\t\t\t├─────────────────┤\n”);printf(”\t\t\t\t│9 退出系统│\n”);printf("\t\t\t\t└─────────────────┘\n”);}void gotoxy(int x, int y)//x为列坐标,y为行坐标{COORD pos = {x,y };HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut,pos);}Student *startCheck(void){Student *pHead;FILE *fp1;char password[20]= "123456”;int i;if ((fp1 = fopen("password。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在这次的程序设计中,老师和同学都是我强大的后盾。比如之前在switch语句下的break的使用和getchar的重要性,还有在小程序里面的循环,每一步的程序都很重要。通过这次的程序设计,我了解到我所感兴趣的东西并不是感兴趣就可以掌握的,要经过不断的练习和调试,在一次一次的失败中找到原因,团结周围的所有力量来突破。
Exit(head);
exit(0);
default:
printf("\n 选择错误,请重新输入!\n");
} // end of switch
} // end of while(1)
return 0;
}
// 浏览学生信息
void Browse(NODE *head)
{
NODE* p=head;
if(p->next==NULL)
另外,在实际编程中,为了提高编程质量,希望学生在书写代码时,对空行、空格和注释严格按要求处理,以建立良好的编程风格。
二.设计项目:学生学籍管理
该课程设计是设计一个模拟学生信息管理程序,要求使用链表来实现。它具有浏览、插入、删除、修改等功能,并且能够对数据进行文件存储和读出操作。
主要功能模块:
1. 浏览学生信息:显示学生的信息。
switch(choice)
{
case 1:
Browse(head);
break;
case 2:
Insert(head);
break;
case 3:
Delete(head);
break;
case 4:
Modify(head);
break;
case 5:
WriteInfo(head);
break;
case 0:
NODE *head;
head=(NODE *)malloc(sizeof(NODE)); // creat head node
head->next=NULL; // install a tail
ReadInfo(head); // get info from disk file if file existed
void Modify(NODE* head);
void WriteInfo(NODE* head);
void ReadInfo(NODE* head);
void FreeList(NODE* head);
void Exit(NODE* head);
// 主程序
int main()
{
int choice; // a variable accept the usntf("无文件记录!请输入学生信息!\n");
return;
}
p=head->next;
printf("numbernameclassessextel\n");
while(1)
{
// 主菜单
printf("\n%s",
" ***** 学生信息管理系统 ******\n"
" * 1. 浏览学生信息 *\n"
" * 2. 插入学生信息 *\n"
" * 3. 删除学生信息 *\n"
" * 4. 修改学生信息 *\n"
" * 5. 保存学生信息 *\n"
" * 0. 退出系统 *\n"
最后在这次的程序设计过程中感谢老师和帮助过我的同学!
六、源程序完整清单
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct node
{
char number[12];
char name[10];
C语言课程设计报告
链表实现学生信息管理
一.课程设计目标
C语言课程设计的目的是通过课程设计的综合训练,培养学生实际分析问题、编程和动手能力,最终目标是通过这种形式,帮助学生系统掌握该门课程的主要内容,更好地完成教学任务。本课程设计具有如下特点:重点在于C语言的基本特征上,涵盖了C语言的重要基础知识。结合了实际应用的要求,使课程设计既涵盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力以及编程能力,并养成良好的编程习惯。
1. 浏览学生信息
3. 删除学生信息
4. 修改学生信息
5. 保存学生信息
四、详细介绍
1、浏览学生信息
2、插入学生信息
3、删除学生信息
4、修改学生信息
5、信息的写入读出
6、学生信息的保存与释放
五、课程设计实践小节
这是这学期的第一次正式的程序设计,目的是运用链表来实现学生的学籍信息管理。在学习过程中,我不仅把以前的函数循环搭配使用了起来,也接触到链表这些全新的概念。
最重要的收获其实还是写编码的重要性。我这边接触过一些华为之类的程序设计员,他们都有c语言设计规范要求,每种固定程序的编写都有固定的格式,不按照格式的都有相应的处罚。这次的程序设计中我充分的体会到了格式的重要性,我程序的最大的问题就在于switch语句里面格式的不对称导致的出错,最后是老师发现的,这是个极大的问题。
2. 插入学生信息:添加学生的信息。
3. 删除学生信息:通过输入学号删除学生的信息。
4. 修改学生信息:通过输入学号修改学生的信息。
5. 保存学生信息:将学生信息保存到文件。
0. 退出系统:结束程序的运行,结束前询问是否保存信息。
三.具体任务
由老师提供主菜单程序以及第0、2个模块。
学生在这个信息系统中加入四个模块,即:
" *****************************\n"
" 请按功能代码选择(0 ~ 5):");
scanf("%d",&choice); // number with return char into the IO butter
getchar(); // clear the return char from buffer
char sex[6];
char classes[10];
char tel[12];
struct node *next;
};
typedef struct node NODE;
// 函数的声明
void Browse(NODE* head);
void Insert(NODE* head);
void Delete(NODE* head);