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()则不会,从键盘上读入一个数据,不给回显,不需要回车确认,按下键就实现了函数。
c语言程序设计报告材料 链表实现学生信息管理系统

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语言开发的数据管理程序,可实现对学生信息的增删改查等功能。
具体功能列表如下: a. 添加学生信息:可根据学生的基本信息,如学生学号、姓名、性别、地址、联系电话等,依次记录入系统; b. 删除学生信息:可根据学生学号、姓名等信息,从系统中删除不必要的学生信息; c. 修改学生信息:可根据已有的学生信息,修改学生某些属性内容,以更新系统中的数据; d. 查看学生信息:可根据学生学号、姓名等信息,查看指定学生的所有信息及多种查询功能; e. 数据保存功能:可将当前系统中的学生信息,保存成文件的形式; f. 备份/恢复功能:可对学生信息文件进行备份并对备份文件进行恢复; g. 查询统计功能:可根据学院代号、专业代号等信息,进行不同的查询统计; h. 排序功能:可根据学生学号、姓名等信息,对学生信息进行排序; i. 帮助功能:可提供详细的使用帮助文档,以帮助用户更好地使用系统;二、程序实现及结构1. 主程序:此程序用于控制整个系统的运行,可实现系统菜单显示、功能调用及功能切换等功能,可根据用户的操作需求,调用其他子程序实现各项功能。
2. 子程序:此程序是系统的主要部分,可实现学生信息的增删改查等功能,并可支持学生信息的备份,恢复,排序及查询统计等功能,用于实现主程序调用的功能。
3. 管理模块:此模块可实现对用户的登录及注册功能,可检测用户登录及注册的账号是否正确,以及是否有权限使用系统;4. 数据库模块:此模块可实现对学生信息的存储及调用,便于对各类学生信息进行更方便的管理。
此模块还可以负责系统的备份及恢复功能的实现。
5. 图形界面模块:此模块负责实现系统的图形化界面,使用户可以更加友好地操作系统,可以根据用户的需求,随时更改系统界面设置。
三、程序设计学生信息管理系统的设计主要有四个部分:1. 主程序:主程序的设计要求负责控制整个系统的运行,并根据用户的操作调用子程序实现各个功能。
C语言课程设计报告 --学生管理系统

C语言课程设计报告 --学生管理系统一、实验目的:通过本次实验,学习C语言的语法和数据类型,设计一个简单的学生管理系统,结合文件I/O所学,可以将学生信息保存至文件中,再读取时自动填充至程序中。
同时,体验软件开发的流程,从需求分析到具体实现。
二、需求分析:1、学生信息包括:学号、姓名、性别、年龄、成绩。
2、学生信息需要添加、删除、修改、查找和显示。
3、程序启动时自动从文件中读取数据,退出时自动保存数据。
三、实验过程:1、确定数据结构和变量类型通过分析需求,学生信息包含多个属性,可以使用结构体来保存每个学生的信息。
同时,为了便于程序运行,需要定义一个链表来保存所有学生信息。
/* 学生信息结构体 */typedef struct _Student {char id[12]; // 学号char name[20]; // 姓名char gender; // 性别int age; // 年龄double score; // 成绩} Student;/* 学生信息链表节点 */typedef struct _StudentNode {Student data; // 学生信息struct _StudentNode *next; // 下一节点指针} StudentNode;/* 学生信息链表头节点 */StudentNode *head = NULL;2、设计主菜单功能考虑学生管理系统的主要功能,可以设计以下主菜单:---------------------------1. 添加学生2. 删除学生3. 修改学生信息4. 查找学生5. 显示所有学生6. 退出---------------------------可以使用一个while循环来循环处理,直到用户选择退出。
3、实现主菜单功能添加学生:先从用户输入中获取学生信息,然后创建一个新的学生信息节点,并将其添加到链表的末尾。
1. 定义变量/* 输入缓存区大小 */#define BUFFER_SIZE 2562. 实现函数/* 添加学生到链表末尾 */void add_student() {Student student; // 待添加的学生信息printf("请输入学号:");scanf("%s", student.id);printf("请输入姓名:");scanf("%s", );printf("请输入性别(M/F):");scanf(" %c", &student.gender);printf("请输入年龄:");scanf("%d", &student.age);printf("请输入成绩:");scanf("%lf", &student.score);StudentNode *node =(StudentNode*)malloc(sizeof(StudentNode));node->data = student;node->next = NULL;if (head == NULL) {head = node;} else {StudentNode *p = head;while (p->next != NULL) {p = p->next;}p->next = node;}printf("添加学生成功!\n");}删除学生:先从用户输入中获取学生学号,然后遍历链表,找到该学号对应的学生信息节点,并删除。
学生宿舍管理系统(单链表)

实验二:学生信息管理(单链表)【实验目的】1. 设计一个学生信息管理系统2. 掌握用C语言定义单链表结构,并实现其创建、插入、删除等基本操作。
【实验内容】本次实验通过单链表的基本操作,实现一个简单的学生信息管理系统,包括:学生信息链表的建立、添加学生信息、查询学生信息、删除学生信息、输出所有学生信息。
【实验要求】本实验是对学生的信息管理作一个简单的模拟,用菜单选择操作方式完成下列功能:链表的建立2.插入学生信息3.查询学生信息4.删除学生信息5.输出所有学生信息0.退出管理系统【知识要点】本实验涉及单链表的各种操作,包括单链表的建立、结点的查找、插入、删除等基本运算。
链表中插入结点的指针变化,删除p所指结点的指针变化。
【实现提示】本题实质是建立学生信息线性表,每条信息由学号、姓名、性别与成绩组成,即链表中每个结点由5个域组成,分别为:学号、姓名、成绩、存放下一个结点地址的next域。
要求完成的五项功能可写成五个函数(0项功能由菜单程序实现),登记学生成绩对应建立学生单链表的功能,2、3、4这三个功能分别对应单链表的插入、查询与删除三大基本操作。
【代码】#include <stdio.h>#include<malloc.h>#include<string.h>typedef struct{char num[8];/*学号*/char name[9];/*姓名*/char gender[3];/*性别*/int score;/*成绩*/}DataType;typedef struct node{DataType data;struct node *next;}ListNode;typedef ListNode *LinkList;LinkList head;/*函数说明*/int menu_select();LinkList createList(void);void printList(LinkList head);int insertNode(LinkList head,ListNode *p,int i);ListNode *findList(LinkList head);void delNode(LinkList head);void main(){ListNode *p;int i;while(1){switch(menu_select()){case 1:printf("**************************************\n");printf(" 学生信息链表的建立\n");printf("***************************************\n");head = createList();break;case 2:printf("**************************************\n");printf("添加学生信息\n");printf("**************************************\n");printf("\n学号(8)姓名(8)性别成绩\n");printf("**************************************\n");p=(ListNode *)malloc(sizeof(ListNode));scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);printf("请输入要插入的位置:\n");fflush(stdin);scanf("%d",&i);if(insertNode(head,p,i)==-1){printf("没有合适的插入点!\n");}else{printf("结点已经插入\n");}break;case 3:printf("**************************************\n");printf("查询学生信息\n");printf("**************************************\n");p=findList(head);if(p!=NULL){printf("\n学号(8)姓名(8)性别成绩\n");printf("-------------------------------------------\n");printf("%s,%s,%s,%d\n",p->data.num,p->,p->data.gender,p->data.score);printf("------------------------------------------------------------------\n");}elseprintf("没查到要查询的学生信息!");break;case 4:printf("**************************************\n");printf("删除学生信息\n");printf("**************************************\n");delNode(head);break;case 5:printf("**************************************\n");printf("输出所有学生信息\n");printf("**************************************\n");printList(head);break;case 0:printf("再见!\n");getchar();return;}}}int menu_select(){int sn;printf("\n 学生信息管理系统\n");printf("=========================================\n");printf(" 1.学生信息链表的建立\n");printf(" 2.插入学生信息\n");printf(" 3.查询学生信息\n");printf(" 4.删除学生信息\n");printf(" 5.输出所有学生信息\n");printf(" 0.退出管理系统\n");printf("==========================================\n");printf("请选择0-5:\n");for(;;){scanf("%d",&sn);if (sn<0 || sn>5)printf("\n\t输入错误,重选0-5\n");elsebreak;}return sn;}LinkList createList(void){ListNode *p,*rear;char flag = 'y';head = (ListNode *)malloc(sizeof(ListNode));rear = head;while(flag=='y' || flag=='Y'){p=(ListNode *)malloc(sizeof(ListNode));printf("\n学号(8)姓名(8)性别成绩\n");scanf("%s%s%s%d",p->data.num,p->,p->data.gender,&p->data.score);rear->next = p;rear = p;printf("继续输入吗?(y/n):");flag = getchar();}rear->next = NULL;return head;}void printList(LinkList head){ListNode *p;p=head->next;printf("\n学号(8)姓名(8)性别成绩\n");printf("-------------------------------------------\n");while(p!=NULL){printf("%s,%s,%s,%d\n",p->data.num,p->,p->data.gender,p->data.score);printf("------------------------------------------------------------------\n");p=p->next;}}int insertNode(LinkList head,ListNode *p,int i){ListNode *p1;int j=1;p1=head;if(p1->next==NULL)/*空表:插入作为第一个结点*/{if(i==0){p1->next=p;p->next=NULL;}elsereturn -1;}while((j<=i-1)&&(p1!=NULL))/*找到第i-1个结点,p1指向该结点*/ {p1=p1->next;j++;}if(p1==NULL)/*没有合适的插入点*/return -1;p->next=p1->next;p1->next=p;return 0;}ListNode *findList(LinkList head){ListNode *p;char num[8];char name[9];int xz;printf("===========================\n");printf("1、按学号查询\n");printf("2、按姓名查询\n");printf("===========================\n");printf(" 请选择:");p=head->next;scanf("%d",&xz);if (xz==1){printf("请输入要查找学生的学号:");scanf("%s",num);while(p && strcmp(p->data.num,num)!=0)p=p->next;}elseif (xz==2){printf("请输入要查找学生的姓名:");scanf("%s",name);while (p && strcmp(p->,name)!=0)p=p->next;}return p;}void delNode(LinkList head){ListNode *p,*q;printf("请先查找您要删除的学生信息:\n");p=findList(head);if(p==NULL){printf("没有查到要删除的学生信息");return;}q=head;while(q!=NULL && q->next!=p) q=q->next;q->next=p->next;free(p);printf("该学生信息已被删除!\n");}。
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学生信息管理系统(链表文件)实验报告

学生信息管理系统XX大学二○一二~二○一三学年第二学期xxxxxxx学院面向对象C++语言课程设计报告课程名称:面向对象C++语言课程设计班级:____学号:____________________姓名:_________指导教师:______________________二○一三年六月目录一、系统需求与功能分析 (3)1.1 系统需求分析 (3)1.2系统功能分析 (3)1.3系统性能分析 (4)二、总体结构设计 (5)2.1系统的结构设计 (5)2.2系统管理流程图 (5)三、系统详细设计和系统实现 (7)四、系统测试 (13)五、测试结果 (14)六、心得体会 (19)七、附录 (20)附录一:源程序清单 (20)附录二:运行结果 (32)一、系统需求与功能分析1.1 系统需求分析(1)能完成学生信息的录入,插入、修改、删除、输出、查询等功能;(2)采用单链表存储结构实现;(3) 所有数据以外部文件方式保存。
1.2系统功能分析(1)要设计一个学生信息管理系统,其功能包括:①录入函数Add():将学生信息按尾插法插入到链表中;②插入函数Insert():根据所给学号作为插入位置,在其后插入信息;③修改函数Modify():修改指定的学生信息;④删除函数Delete():当需要删除的学号和姓名一致时则删除对应的学生记录;⑤输出函数Show():显示全部学生信息;⑥查询函数Search():分别可以按学号和按姓名进行学生信息查询;⑦菜单函数Menu():为程序的菜单函数为实现各种功能提供便捷;⑧读取数据函数Read():从外部文件读取学生信息信息;⑨保存数据函数Save():将数据保存到外部文件中。
(2)线性表的链接存储结构称为单链表,单链表使用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置。
为了正确表示元素之间逻辑关系,每个存储单元在存储数据元素的同时,还必须存储其后继元素所在地址信息,这个地址信息称为指针,这两部分组成了数据元素的存储映像,称为结点,结点结构如图 1.1所示。
学生信息管理系统(链表)

#include <stdio.h>#include <string.h>#include <malloc.h>struct shengri{int year;int month;int day;};struct student{char name[40];char sex[5];char sno[20];char telephone[20];char sid[40];struct shengri birth;int address[200];};struct student *stu=NULL;int current=0;int total=0;void insert(){if(stu==NULL)stu=(struct student *)malloc(total*sizeof(struct student));if(current>=total){printf("对不起,由于人数已满,不能继续录入新学生信息\n");return;}printf("请输入学生姓名: ");scanf("%s",stu[current].name);printf("请输入学生性别: ");scanf("%s",stu[current].sex);printf("请输入学生学号: ");scanf("%s",stu[current].sno);printf("请输入学生电话号码: ");scanf("%s",stu[current].telephone);printf("请输入学生身份证号码: ");scanf("%s",stu[current].sid);printf("请输入学生出生日期(年-月-日): ");scanf(" %d-%d-%d",&stu[current].birth.year,&stu[current].birth.month,&stu[current].birth.d ay);printf("请输入学生家庭地址: ");scanf("%s",stu[current].address);current++;return;}void query(){char name[40];char xuehao[40];int i,item,flag;printf("\n");printf("1.按学号查询\n");printf("2.按姓名查询\n");printf("3.退出本菜单\n");printf("\n");while(1){printf("\n");printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item){case 1:printf("请输入要查询的学生的学号:");scanf("%s",xuehao);for(i=0;i<current;i++)if(strcmp(stu[i].sno,xuehao)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:学号为%s的学生不存在",xuehao);break;break;case 2:printf("请输入要查询的学生的姓名:");scanf("%s",name);for(i=0;i<current;i++)if(strcmp(stu[i].name,name)==0){flag=1;printf("学生信息如下\n");printf("姓名: %s\n",stu[i].name);printf("性别: %s\n",stu[i].sex);printf("学号: %s\n",stu[i].sno);printf("电话号码: %s\n",stu[i].telephone);printf("身份证号: %s\n",stu[i].sid);printf("出生日期: %d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("家庭地址: %s\n",stu[i].address);return;}if(flag==0)printf("\n");printf(" 警告:姓名为%s学生不存在",name);break;case 3:return;default:printf("非法输入,请在1-3之间选择\n");}}}void update(){char name[40];int i;printf("请输入要修改的学生姓名: ");scanf("%s",name);for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("请输入修改后的学生姓名: ");scanf("%s",stu[i].name);printf("\n");printf("修改后前的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("请输入修改后的学生性别: ");scanf("%s",stu[i].sex);printf("\n");printf("修改前的学生学号为: ");printf("%s",stu[i].sno);printf("\n");printf("请输入修改后的学生学号: ");scanf("%s",stu[i].sno);printf("\n");printf("修改前的学生电话号码为: ");printf("%s",stu[i].telephone);printf("\n");printf("请输入修改后的学生电话号码: ");scanf("%s",stu[i].telephone);printf("\n");printf("修改前的学生身份证号为: ");printf("%s",stu[i].sid);printf("\n");printf("请输入修改后的学生身份证号: ");scanf("%s",stu[i].sid);printf("\n");printf("修改前的学生出生日期,格式(年-月-日):");printf("%d-%d-%d",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf("\n");printf("请输入修改后的学生出生日期,格式(年-月-日):");scanf("%d-%d-%d",&stu[i].birth.year,&stu[i].birth.month,&stu[i].birth.day);printf("\n");printf("修改前的家庭住址为: ");printf("%s",stu[i].address);printf("\n");printf("请输入修改后的家庭地址: ");scanf("%s",stu[i].address);return;}}printf(" 该学生不存在,请重新选择\n");return;}void deiete(){char name[40];int i,k;char a;printf("请输入要删除的学生姓名: ");scanf("%s",name);printf("\n");for(i=0;i< current;i++){if(strcmp(stu[i].name,name)==0){printf("要删除的学生姓名为:%s\n",stu[i].name);printf("\n");printf("你确定要删除吗?继续请按'y'或'Y',放弃请按'n'或'N'\n");printf("\n");printf("请选择:");scanf("%s",&a);if (a=='y'||a=='Y'){for(k=i;k<current;k++)strcpy(stu[k].name,stu[k+1].name);break;}if(a=='n'||a=='N'){printf("放弃删除!");return;}printf("非法输入");return;}}if(i==current)printf("警告:姓名为%s的学生不存在\n\n",name);else{printf("该学生信息已成功删除!\n");current--;}return;}void list(){int i;printf("一共有%d个学生信息\n",current);printf("\n");printf("学生信息列表为:\n");printf("\n");for(i=0;i<current;i++){printf("第%d个学生信息如下:\n",i+1);printf(" 姓名: %s\n",stu[i].name);printf(" 性别: %s\n",stu[i].sex);printf(" 学号: %s\n",stu[i].sno);printf(" 电话号码: %s\n",stu[i].telephone);printf(" 身份证号码: %s\n",stu[i].sid);printf("出生日期:%d-%d-%d\n",stu[i].birth.year,stu[i].birth.month,stu[i].birth.day);printf(" 家庭地址:%s\n",stu[i].address);printf("\n");}return;}void save(){int count;FILE*fs;fs=fopen("studentdata.dat","wb");if(fs==NULL){printf("不能打开文件\n");return;}count=fwrite(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("文件保存失败\n");return;}printf("文件保存成功!\n");return;}void load(){FILE *fs;int count=0;int succ=0;fs=fopen("studentdata.dat","rb");if(fs==NULL){printf("不能打开文件!\n");return;}succ=fseek(fs,0,2);if(succ!=0){printf("文件操作失败!\n");return;}count=ftell(fs);fseek(fs,0,0);current=count/sizeof(struct student);stu=(struct student *)malloc(total*sizeof(struct student));count=fread(stu,sizeof(struct student),current,fs);fclose(fs);if(count!=current){printf("读取文件失败\n");return;}printf("读取文件成功\n");return;}void main(){int choice;printf(" \n\t\t 尊敬的用户您好,欢迎使用学生信息管理系统\n");printf("\n 1.进入系统后,先按“7”加载学生信息,再进行查询;\n");printf("\n 2.按照菜单提示输入数字代号;\n");printf("\n 3.增加学生信息后,切记保存按“6”;\n");printf("\n 4.谢谢您的使用!\n");printf("\n");printf("\n");printf("\n\n\t *****学****生****信****息****管****理****系****统*****\n");printf("\n");printf("\n");printf(" 主编:电子131姜增浩\n");printf("\n");printf("\n");printf("请您输入要录入的学生总人数:");scanf("%d",&total);while(1){printf("--------------------------------------------------------------------------------");printf(" ----------------------------");printf(" ***学生信息管理系统程序功能***\n");printf(" ----------------------------\n");printf("\n");printf(" 1: --录入学生信息-- \n");printf(" 2:--查询学生信息-- \n");printf(" 3:--修改学生信息-- \n");printf(" 4:--删除学生信息-- \n");printf(" 5:--列出学生信息-- \n");printf(" 6:--保存学生信息-- \n");printf(" 7:--加载学生信息-- \n");printf(" 8:--退出程序-- \n");printf("--------------------------------------------------------------------------------\n");printf("\n\n");printf(" 请选择:");scanf("%d",&choice);printf("\n\n");switch(choice){case 1:insert();break;case 2:query();break;case 3:update();break;case 4:deiete();break;case 5:list();break;case 6:save();break;case 7:load();break;case 8:return;default:printf("非法选择请重新选择");}}}。
c学生信息管理系统课程设计

c 学生信息管理系统课程设计一、课程目标知识目标:1. 让学生理解学生信息管理系统的基本概念和功能。
2. 掌握使用数据库管理系统进行数据录入、查询、更新和删除的基本操作。
3. 学会设计简单的学生信息管理系统的界面和功能。
技能目标:1. 培养学生运用数据库技术进行信息管理的能力。
2. 培养学生运用编程语言实现学生信息管理系统的功能。
3. 提高学生分析问题、解决问题的能力。
情感态度价值观目标:1. 培养学生对待信息技术的积极态度,认识到信息技术在日常生活和学习中的重要性。
2. 培养学生的团队协作精神,学会与他人共同解决问题。
3. 培养学生的创新意识和实践能力,敢于尝试新技术,勇于解决实际问题。
课程性质:本课程属于信息技术学科,以实践操作为主,结合理论知识的讲解。
学生特点:学生具备一定的计算机操作基础,对数据库和编程有一定了解,具备初步的分析问题和解决问题的能力。
教学要求:注重理论与实践相结合,以学生为主体,教师为主导,鼓励学生动手实践,培养实际操作能力。
通过本课程的学习,使学生能够独立设计并实现一个简单的学生信息管理系统,提高学生的信息技术素养。
二、教学内容本课程教学内容分为以下几个部分:1. 学生信息管理系统概述:介绍学生信息管理系统的基本概念、功能及在实际中的应用。
- 教材章节:第一章- 内容:系统需求分析、系统功能模块划分2. 数据库基础知识:讲解数据库的基本概念、关系型数据库的设计及SQL语句的使用。
- 教材章节:第二章- 内容:数据库原理、表的设计、数据类型、SQL语言基础3. 数据库操作:学习如何使用数据库管理系统进行数据录入、查询、更新和删除操作。
- 教材章节:第三章- 内容:数据库表操作、数据查询、数据更新与删除4. 编程语言基础:介绍一种编程语言(如Python、Java等),并讲解如何实现学生信息管理系统功能。
- 教材章节:第四章- 内容:编程环境搭建、基本语法、面向对象编程、文件操作5. 系统设计与实现:学习如何设计学生信息管理系统的界面和功能,并进行实际操作。
c语言课程设计报告---学生信息管理系统

题目:学生信息管理系统
一、需求分析
任务要求:
自学C 语言中有关链表及外部文件的内容,设计学生信息管理系统。
具体要求如下:
♦建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;♦能够提供添加、删除和修改学生信息等功能;
♦能将通讯录保存在文件中;
★能够按指定方式输出学生信息。
系统功能需求分析:
★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))
- 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++平台工程的建立。