C++课程设计 单链表——学生信息管理系统
C课程设计单链表学生信息管理系统模板

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语言课程设计之学生信息管理系统 (2)

学生信息管理系统设计案例一、引言学生信息管理系统是一种集学生信息录入、查询、修改和删除等功能于一体的软件系统。
为了满足学校对学生信息的有效管理和查询需求,本文将介绍一种用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语言程序设计报告-基于链表的学生信息管理系统

《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 ):查找指定的学生,返回指向该学生结点的指针。
数据结构单链表应用(简易学生信息管理系统)

数据结构单链表应用(简易学生信息管理系统)1这是主文件建立文件“student-main.cpp”粘贴保存#include#include#include#include#include"student-fun.cpp"#define PRINT "%6d %12s %5.2f\n",p->num,p->name,p->score //定义输出格式#define PRINTF " 学号姓名成绩\n"char cmd;int num;lklist L;void jiemian(){ system("cls");printf("\n***************************************************** ****************** *");printf("\n****** 欢迎使用简易班级学生信息系统********");printf("\n**************");printf("\n******i--增加学生d--删除学生q--退出系统********");printf("\n****** f--查询c--修改l--列出所有学生信息********");printf("\n***************************************************** ****************** *\n");}void ReadCommand(){do {printf("\n 请根据提示输入命令: ");fflush(stdin); //清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件scanf("%c",&cmd);} while (cmd!='i'&&cmd!='d'&&cmd!='l'&&cmd!='q'&&cmd!='f'&&c md!='c');}void Interpret()switch(cmd){case 'i': insert_lklist(L); break;case 'd': del_lklist(L);break;case 'l': list_lklist(L); break;case 'f': find_lklist(L);break;case 'c': cor_lklist(L);break;case 'q': exit(0);}}void main(){L=initial_lklist();do { jiemian();ReadCommand();Interpret();system("pause"); //暂停,按任意键继续。
C语言课设学生信息管理系统

流程图:开始显示菜单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 语言有了更近一步的认识和了解, 不仅巩固了以前所学过的知识, 而且在查阅资料过程中学到了很多书本上 学不到的知识。
数据结构 利用单链表实现学生基本信息管理 课程设计 实验报告

数据结构课程设计设计题目:利用单链表实现学生基本信息管理目录课题名称利用单链表实现学生基本信息管理院系年级专业学号姓名成绩课题设计目的与设计意义课题设计目的:(1)学会单链表结点的定义(2)掌握单链表的基本运算,熟悉对单链表的一些基本操作和具体函数的定义。
(3)加深对链表的理解,逐步培养解决实际问题的编程能力(4)创建一个初始链表,通过调用定义的基本操作函数来实现单链表上的插入、删除元素等操作。
调试程序并对相应的输出做出分析;修改输入数据,预期输出并验证输出的结果。
加深对有关意义:一般来讲,课程设计教学实验复杂一些,深度更广并且更加接近实用.通过课程设计的综合训练,培养学生实际分析问题,编程和动手能力,使学生对数据结构进行更深一层的了解,培养同学们对学习数据结构这门课程的兴趣, 让同学们学会如何去查找资料和整合处理这些资料的能力, 也为以后的大学毕业设计论文打下了一个初步的基础.这些课程设计都是比较难的,要分成几个小项目, 几个学生一组, 培养团队协作精神. 最终帮助学生系统掌握课程的主要内容, 更好地完成教学任务. 基本掌握面向过程程序设计的基本思路和方法; (2)达到熟练掌握数据结构的基本知识和技能;(3)能够利用所学的基本知识和技能,解决简单的程序设计问题.指导教师:年月日一:课程设计目的和意义...................................................................................................... - 1 -1、课程设计目的:............................................................................................................ - 1 -2、课程设计意义:............................................................................................................ - 1 - 二:需求分析与要求:.......................................................................................................... - 1 -1、程序功能:.................................................................................................................... - 1 -2、基本要求:.................................................................................................................... - 2 -3、功能要求:.................................................................................................................... - 2 -(1)信息录入功能:................................................................................................ - 2 -(2)查询功能:........................................................................................................ - 2 -(3)插入功能:........................................................................................................ - 2 -(4)删除功能:........................................................................................................ - 2 -(5)输出功能:........................................................................................................ - 2 -4、说明:............................................................................................................................ - 2 -5、输入输出的形式:........................................................................................................ - 3 -6、开发环境:.................................................................................................................... - 3 -三、概要设计:.......................................................................................................................... - 3 -四、模块图:.............................................................................................................................. - 5 -五、详细设计:.......................................................................................................................... - 5 -六、运行结果与分析:.......................................................................................................... - 10 -1 、主界面........................................................................................................................ - 10 -2.建立学生信息表............................................................................................................ - 11 -3、查询某学生的所有信息。
用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语言课程设计学生信息管理系统

2>N-S流程图三、详细设计说明:1>头文件#include <stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>2>数入口说明main();主函数;void menu();主菜单界面;void add();添加新的学生信息;void print(int i);打印学生信息;void scan();查找学生信息;void res();检索学生信息界面;void res_name();按姓名检索;void res_num();按学号检索;void del(int i);删除学生信息;void modify(int i);修改学生信息;void fileopen();打开文件;void filesave();保存文件;2>调用关系4.调试与测试: 编译工具1.C/C++程序设计学习与实验系统2.Tcmain() filesave()res()res_num()res_name()modify(int i)del(int i)menu()3.VC++6.0均通过调试!主菜单添加新的学生信息浏览所有学生信息检索信息库继续查找下一条修改学生信息删除信息库所有记录五、调试中所遇到的问题及解决方法1>问题:程序退出后,再次打开,上次输入的数据无法保存。
解决:调用fileopen()与filesave()保存文件数据,方便第二次打开程序时仍能调用上次输入的数据。
2>问题:跳出的界面与选择分支中的对应项不符合。
解决:改getchar()为getch(),头文件中加”conio.h”.因为getchar()从输入输出流中一次只能读取一个字符,而且需要以回车来确认输入。
本文件中多次用到getchar(),键盘缓冲区的’\n’会被下次调用getchar()时接收。
而getch()则不会,从键盘上读入一个数据,不给回显,不需要回车确认,按下键就实现了函数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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; 表明这是一个空链表
cout<<"请建立链表\n";
}
然后建立链表
:
二、添加:按照学号从小到大的顺序插入:
三、输出:将链表的数据输出,由于上述操作,输出时会按照学号从小到大的顺序输出。
四、查找:利用学号和姓名两种方式进行查找,查找时主要是遍历链表进行判断
while(p!=NULL&&(d==1&&strcmp(input,p->data.num)!=0)||(d==2&&strcmp(i nput,p->)!=0))
{p=p->next;
} //遍历链表查找符合要求的节点
五、删除:利用节点的删除操作,找到链表中第i-1个结点,修改其指向后继的指针:
q = p->next;
p->next = q->next;
delete(q);
六、更改:利用查找的操作,查到后在进行重新输入的操作;
五、测试情况说明
测试一:学生信息的输入和输出都正常,但是查找、删除和修改时都只能对第
一个数据进行操作,如下图所示:
但是当要进行查找、删除、修改操作时,系统只能对第一个对象进行操作
查看程序时,发现查找函数、删除和修改函数都有个逻辑错误
全部修改后,程序的上述错误就没再出现了。
错误二:当提示是否输入课程成绩信息时,输入第一门课程名时,会出现无穷
循环
但当输入第一门课程后就会出现下图所示状况:
对于这种状况,我百思不得其解,后来请教其他同学,他告诉我错误在于声明课程成绩信息时出错了
应该为二维数组,修改之后,课程成绩输入输出便正常了
错误三:输入学生信息时不按照学号大小顺序,输出结果时也不按照从小到大的顺序输出。
如下图所示
后来查看程序,发现插入函数(insert)中判断新插入的数据的位置时出现问
题
应该为strcmp(p->data.num,x.num)<0;之后输出正确了!
六、评价和改进意见
(1)不足:①程序可能存在冗杂之处。
②软件功能有限。
③界面为Dos界面,比较单调。
(2)特点:①运用链表的操作,可以方便地实现对学生信息的操作。
②基于Visual C++平台工程的建立。