数据结构C语言课程设计任务书完整版--学生管理系统
原创c语言+数据库 学生管理系统课程设计

原创C语言+数据库学生管理系统课程设计一、引言学生管理系统是一种应用程序,旨在管理学生的基本信息、课程信息、成绩信息以及其他相关信息。
本文将介绍一个基于C语言和数据库的学生管理系统的课程设计。
二、系统设计学生管理系统主要分为以下几个模块:学生信息管理、课程信息管理、成绩管理和报告生成。
2.1 学生信息管理学生信息管理模块主要用于添加、修改、删除和查询学生的基本信息。
学生的基本信息包括学号、姓名、性别、年龄等。
利用数据库存储学生信息可以提高系统的效率和数据的安全性。
通过C语言与数据库的交互,可以实现对学生信息的增删改查操作。
2.2 课程信息管理课程信息管理模块用于添加、修改、删除和查询课程的相关信息。
每门课程有自己的课程编号、课程名称、上课地点、上课时间等。
同样地,课程信息也可以通过数据库进行存储和管理。
2.3 成绩管理成绩管理模块用于录入和查询学生的成绩信息。
每名学生可以选择多门课程,并获取相应的成绩。
成绩信息包括学生学号、课程编号、成绩等。
通过C语言与数据库的结合,可以方便地进行成绩的录入、修改和查询。
2.4 报告生成报告生成模块将学生的基本信息、课程信息和成绩信息综合起来,生成一份完整的报告。
该报告可以用于学校的教务管理、学生的评估等。
通过对数据库中的数据进行查询和整合,可以实现报告的自动生成。
三、技术实现在这个学生管理系统的课程设计中,我们将使用C语言作为编程语言,以及使用MySQL作为数据库管理系统。
具体的实现步骤如下:1.建立数据库首先,我们需要创建一个数据库,用于存储学生信息、课程信息和成绩信息。
可以使用MySQL命令行或者图形化界面工具创建数据库。
2.建立表格在数据库中创建相关的表格,用于存储学生信息、课程信息和成绩信息。
表格的列可以根据实际需要进行设计,例如学生表格可以包括学号、姓名、年龄等列。
3.连接数据库使用C语言编写程序,连接到MySQL数据库。
可以使用MySQL提供的C语言接口库,实现与数据库的连接。
c语言课程设计-任务书8-学生学籍管理系统

进度
要求
1.布置设计题目,讲解要求和说明2014.1.6
2.确定设计任务,确定具体的功能,熟悉相关知识2014.1。6
3。按功能需求确定程序的主要模块2014.1.7
4。编程实现程序的功能2014.1.7–2014.1.8
5.调试并完善程序2014。1.8–2014.1.9
(3)删除功能:当在A.TXT中删除一个学生时,自动地在B。TXT中删除此人所有信息。
(4) 排序功能:能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
(二)其它要求:
(1)只能使用C语言,源程序要有适当的注释,使程序容易阅读
(2) 采用文本菜单界面
(3) 学生可自动增加新功能模块(视情况可另外加分)
学号课程编号课程名称学分平时成绩 实验成绩 卷面成绩 综合成绩 实得学分
01A01大学物理 36678 82
02B03高等数学 478—1 90
01B03高等数学 445—1 88
02C01VF 36576 66
………………………
设计
参数
(一)功能要求及说明:
(1)数据录入功能: 对B.TXT进行数据录入,只录入每个学生的学号、课程编号、课程名称、学分、平时成绩、实验成绩、卷面成绩共7个数据. 综合成绩、学分由程序根据条件自动算出。
2.若填写内容较多可另纸附后.
3。一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。
教研室主任:易军指导教师:熊茜、许莎
2014年1月2日
学 号:xx 姓 名:xxxxx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
课程编号:xxx 课程名称:xxxxx 综合成绩:xxxx 实得学分: xx
数据结构课程设计学生管理系统

#include<stdio.h>#include <malloc.h>#include<string.h>#include<stdlib.h>#include <io.h>//建立结构体struct student{long num;//学号char name[10];//姓名char sex[10];//性别char id[20];//身份证号char adress[80];//家庭地址long tel; //电话号码struct student * next;};/*此学生信息管理系统一共分为八个模块,分别为信息录入、信息浏览、信息查询、信息删除、信息修改、信息插入、信息保存、信息读取,其中信息保存和信息读取为隐藏模块。
系统界面清晰,操作简单,用户输入密码之后就可进入进行各种操作。
*/FILE *fp;//文件指针int count=0;//记录学生数量struct student *head;//学生信息录入struct student *input(){struct student *head=NULL; //定义头指针struct student *p1,*p2; //定义结点while(1){int choice;printf(" |------------------| \n");printf(" | 【1】录入学生信息| \n");printf(" | 【0】退出| \n");printf(" |------------------| \n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" *****学生信息录入模块***** \n");p1=(struct student *)malloc(sizeof(struct student));//开辟一个新结点printf(" 请输入学号: ");scanf("%ld",&p1->num);printf(" 请输入姓名: ");scanf("%s",p1->name);printf(" 请输入性别:");scanf("%s",p1->sex);printf(" 请输入身份证号:");scanf("%s",&p1->id);printf(" 请输入家庭住址:");scanf("%s",p1->adress);printf(" 请输入手机号:");scanf("%ld",&p1->tel );count++;if(head==NULL){head=p1;}elsep2->next=p1;//p1指向下一个结点p2=p1;}else if(choice==0)break;elseprintf(" 选择错误!请重新选择!\n");}p1->next=NULL;return head;}//学生信息浏览void displayall(struct student *head){struct student *p1=head;if(head==NULL){printf("无学生信息!\n");return;}else{printf("总共有%d个学生!\n",count);printf(" 所有学生信息为:\n");printf("***************************************************************\n");while(p1!=NULL){printf("\n学号:%ld\n姓名:%s\n性别:%s\n身份证号:%s\n家庭住址:%s\n手机号:%ld\n\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}}}void display(struct student *p1){{printf(" 该学生信息为:\n");printf("***************************************************************\n");printf(" \n学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");printf("%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num,p1->name,p1->sex,p1->id,p1->adress,p1->tel); }}//查询学生信息struct student *query(struct student *head){ struct student *p1;int choice;int num;char name[10];if(head==NULL) {printf("链表为空或无学生记录!\n");return head;}while(1){printf(" |---------------|\n");printf(" |【1】按学号查询|\n");printf(" |【2】按姓名查询|\n");printf(" |【0】退出|\n");printf(" |---------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){printf(" 请输入要查询学生的学号:"); scanf("%ld", &num);p1=head;while(1){if(num == p1->num) {printf(" *****找到该学生信息*****\n"); display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num); break;}else p1=p1->next;}}else if(choice==2){printf(" 请输入要查询学生的姓名:"); scanf("%s", name);p1=head;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");}else{while((strcmp(name, p1->name)!=0)&& p1->next!=NULL) { p1=p1->next;if(strcmp(name, p1->name)==0){printf(" *****找到该学生信息*****\n");display(p1);break;}elseprintf(" 没有姓名为%s的学生!\n",name);}}}else if(choice==0)break;elseprintf(" 选择错误!\n");}return (p1);} //删除学生信息struct student *del(struct student *head){struct student * p1, * p2;int num,choice;if(head==NULL){printf(" 链表为空或无学生记录!\n");return head;}printf(" 请输入要删除的学生学号:");scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {printf(" ****找到该学生信息****\n");display(p1);break;}if(p1->next==NULL){printf(" 没有学号为%d的学生信息!\n",num);return head;}else{p2=p1;}}printf(" |-------------|\n");printf(" |【1】确认删除|\n");printf(" |【0】返回|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){count--;if(p1 == head)head=p1->next;elsep2->next=p1->next;free(p1);printf(" 该学生信息已删除!\n");}else if(choice==0)return head;elseprintf("无效选择,请重新输入!");return head;}//修改学生信息struct student *change(struct student *head){ struct student *p1,*p2;int choice;long num;int flog;if(head==NULL){printf(" 链表为空或无学生记录!\n"); return head;}printf(" 请输入要修改的学生的学号:"); scanf("%ld",&num);p1=head;while(1){if(num == p1->num) {flog=1;break;}if(p1->next==NULL){flog=0;break;}else{p2=p1;p1=p1->next;}}if(flog==0){printf(" 没有学号为%d的学生信息!\n",num); }else if(flog==1){printf(" ****找到该学生信息****\n"); display(p1);while(1){printf(" |**********************|\n");printf(" |【1】修改姓名|\n");printf(" |【2】修改性别|\n");printf(" |【3】修改身份证号|\n");printf(" |【4】修改家庭住址|\n");printf(" |【5】修改电话号码|\n");printf(" |【0】退出|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{printf(" 请输入修改后的姓名:");scanf("%s",p1->name);break;}case 2:{printf(" 请输入修改后的性别:");scanf("%s",p1->sex);break;}case 3:{printf(" 请输入修改后的身份证号:"); scanf("%s",&p1->id);break;}case 4:{printf(" 请输入修改后的家庭住址:"); scanf("%s",p1->adress);break;}case 5:{printf(" 请输入修改后的电话号码:");scanf("%ld",&p1->tel);break;}case 0:return head;default:printf(" 无效选择,请重新输入!\n");}}}return head;}//插入一个学生信息struct student *insert(struct student *head){struct student *p1,*p2,*insertstu;int place,choice,mark=0,num=0;if(head==NULL){printf(" 信息为空请选择信息录入!\n");return head;}while(1){printf(" |-------------|\n");printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |-------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);if(choice==1){insertstu=(struct student *)malloc(sizeof(struct student));displayall(head);printf(" 请输入要插入的位置:");scanf("%d",&place);if(place==1){mark=1;insertstu->next=head;head=insertstu;}else{for(p2=p1=head,num=1;p1->next !=NULL;p2=p1,p1=p1->next,num++){ if(num==place){mark=1;insertstu->next=p1;p2->next=insertstu;break;}}if(place==num){mark=1;insertstu->next=p1;p2->next=insertstu;}else if(place==num+1){mark=1;p1->next=insertstu;insertstu->next=NULL;}else if(place>num+1){printf(" 超出插入范围,请核对!\n"); continue;}}if(mark==1){printf(" 请输入要插入的学生信息!\n"); printf(" 请输入学号:");scanf("%ld",&insertstu->num);printf(" 请输入姓名:");scanf("%s",insertstu->name);printf(" 请输入性别:");scanf("%s",insertstu->sex);printf(" 请输入身份证号:");scanf("%s",&insertstu->id);printf(" 请输入家庭住址:");scanf("%s",insertstu->adress);printf(" 请输入手机号:");scanf("%ld",&insertstu->tel );count++;display(insertstu);}}else if(choice==0)break;elseprintf("无效选择,请重新输入!\n");}return head;}//学生信息保存int SaveStudent(struct student *head){struct student *p1;p1=head;if((fp=fopen("student.txt","w+"))==NULL){printf("文件打开失败!\n");exit(0);}fprintf(fp,"%d\n",count);fprintf(fp,"学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");while(p1!=NULL){fprintf(fp,"%ld\t%s\t%s\t%s\t\t%s\t\t%ld\n", p1->num, p1->name,p1->sex,p1->id,p1->adress,p1->tel);p1=p1->next;}return 1;fclose(fp);}void freeAll(struct student *head){struct student *p1, *p2;p1=p2=head;while(p1){p2=p1->next;free(p1);p1=p2;}}struct student *LoadStudent(){struct student *head;struct student *p1, *p2;fp = fopen("student.txt", "r+");if (!fp){printf("文件打开错误!\n");exit(0);}fscanf(fp,"%d\n", &count);fscanf(fp, "学号\t姓名\t性别\t身份证号\t家庭住址\t手机号\n");head=p1=p2=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); while(!feof(fp)){p1=(struct student *)malloc(sizeof(struct student));fscanf(fp,"%ld%s%s%s%s%ld\n", &p1->num, p1->name,p1->sex,&p1->id,p1->adress,&p1->tel); p2->next=p1;p2=p1;}p2->next = NULL;fclose(fp);return head;}//主菜单void menu(struct student *head){int n;while(1){int choice;printf(" |*****学生信息系统*****|\n");printf(" |**********************|\n");printf(" |【1】录入学生信息|\n");printf(" |【2】浏览学生信息|\n");printf(" |【3】查询学生信息|\n");printf(" |【4】删除学生信息|\n");printf(" |【5】修改学生信息|\n");printf(" |【6】插入学生信息|\n");printf(" |【0】退出系统|\n");printf(" |**********************|\n");printf(" 请输入你的选择:");scanf("%d",&choice);switch(choice){case 1:{if(head==NULL){head=input();}else{head=insert(head);}break;}case 2:{displayall(head);break;}case 3:{query(head);break;}head=del(head);break;}case 5:{change(head);break;}case 6:{head=insert(head);break;}case 0:{n=SaveStudent(head);freeAll(head);printf("信息已成功保存!\n");return;}default:printf("无效选项,请重新输入!\n");}}}//欢迎界面void welcome(){int choice;printf(" ************************\n"); printf(" * *\n");printf(" * 欢迎使用学生信息系统*\n"); printf(" * *\n");printf(" ************************\n"); printf(" * *\n");printf(" ************************\n"); printf(" |【1】继续|\n");printf(" |【0】退出|\n");printf(" |------------|\n");printf(" 请输入你的选择:");scanf("%d",&choice);system("cls");if(choice==1){if((fp=fopen("student.txt","r+"))==NULL){ menu(head);}head=LoadStudent();menu(head);}}else{return;}}//程序入口void main(){char userName[9];char userPWD[7];int i;for(i=0;i<3;i++){printf("\n\n\n\n\n\n\n");printf("\n请输入您的用户名:");scanf("%s", userName);printf("\n请输入您的密码:");scanf("%s", userPWD);if ((strcmp(userName,"123")==0) && (strcmp(userPWD,"123")==0)){ printf("用户名和密码输入正确!\n");system("cls");//用户名和密码正确,显示欢迎菜单welcome();break;}else{if(i<2){system("cls");//用户名或密码错误,提示用户重新输入printf("用户名或密码错误,请重新输入!");}else{system("cls");//连续3次输错用户名或密码,退出系统。
数据结构课程设计学生信息管理系统完整版

数据结构课程设计学生信息管理系统HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】题目2.学生信息管理系统一、课程设计目的1.数据结构课程设计是综合运用数据结构课程中学到的几种典型数据结构,以及程序设计语言(C语言),自行实现一个较为完整的应用系统的设计与开发2.通过课程设计,自己通过系统分析、系统设计、编程调试,写实验报告等环节,进一步掌握应用系统设计的方法和步骤,灵活运用并深刻理解典型数据结构在软件开发中的应用。
3.学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
学生信息管理系统:(1)熟练掌握链表存储结构及其建立过程和常用操作;(3)学会自己调试程序的方法并掌握一定的技巧二、课程设计内容建立学生信息管理系统,通过链表实现对学生信息的输入,查找,删除,插入和排序等操作。
三、需求分析1.每位学生的信息有:学号,姓名,性别,出生日期,E-mile,电话,c成绩,数学成绩等,用链表对学生的信息进行存储。
2.全部数据可以只放在内存中;3.系统能实现的操作和功能如下:a) 输入学生信息:对不同学生分别输出下列信息:学号,姓名,性别,出生日期,E-mile,电话,c成绩,数学成绩等。
b) 查找学生信息:根据学生的学号或姓名对学生的信息进行查找。
c) 删除学生信息:删除某个学生的所有信息。
d) 插入学生信息:将某个学生的信息插入到已经输入的信息中。
e) 显示学生信息:将所有学生的信息显示出来。
f) 排序:将所有学生按某个学科的成绩依次排序。
四、概要设计1.系统结构图(功能模块图)2.功能模块说明①.输入学生信息,creat()函数:建立单向链表,组织循环,将学生的信息依次录入。
②:查找学生信息:a.按学号查找,find1()函数;b.按姓名查找,find2()函数;③.删除学生信息,del()函数:建立指针,在链表中寻找要删除信息的学生的学号,找到后p->next=p->next->next,将其删除。
C语言课程设计学生信息管理系统方案

c语言及数据结构与算法课程设计题目 :学生信息管理系统专业:姓名:学号:同组其他学生 ( 学号 ) :2021年月日目录一、需求解析. (3)二、整体设计. (4)三、详细设计. (5)四、调试与测试. (6)五、测试结果. (7)六、用户手册. (9)七、附录 (9)一、需求解析每年九月份都有大量再生抵达学校报道,使学校管理学生工作量增大,为此我们设计一学生信息管理系统,学生信息包括:学号,,年龄,性别,出生年月,地址,, E-mail 等。
使之能供应予下功能:〔1〕系统以菜单方式工作〔2〕学生信息录入功能 --- 输入〔3〕学生信息阅读功能 --- 输出〔4〕盘问、排序功能 --- 算法按学号盘问、按盘问、学生信息的删除与修改〔可选项〕二、整体设计组成框图主菜单欢送界面录入按姓名删除主函数盘问按学号阅读退出更正流程图开始密码可否正确Y主菜单1 录入学生信息2 阅读学生信息3----盘问学生信息删除4----删除学生信息5----更正学生信息0----退出系统阅读更正退出结束录入开始申请新空间输入各项数据显示数据结束N重新输入Y密码可否正确录入盘问阅读开始指针 p 指向头结点输出指针的数据P=p->nextNP==NULL?Y结束盘问更正 &删除输入姓名或学号输入要删除或修改的学号P=p->next P 指针的学号与姓名可否与输N P 指针的学号N 入的相同?与输入的可否相同YY输出数据更正p 的各项数据或将p=p->next结束结束三、详细设计主函数经过在 while 循环结构中嵌入switch 分支结构实现操作选择功能。
(1〕 Record 录入函数建立一个包括学生全部信息的结构体,申请空间,其指针为 p0,存入学生各项对应的数据。
(2〕 Insert 插入函数 :按输入的数据储藏在一个 stu 种类的指针里,假设原来链表里没有元素,那么将此作为第一个元素;假设原来的链表里有元素,那么将指向头结点指针储藏的学号与头指针下一个的学号大小进行比较,小的在前大的在后,此后指向头结点处...移,进行比较,直到尾结点为止。
学生管理系统(数据结构课程设计之完整代码)

数据结构课程设计学生信息管理系统C语言编写仅供参考:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define LEN sizeof(LNode)typedef struct LNode{//用于存放学生信息节点int stuNumber;char telenum[50];int age;char chass[50];char deptName[50];/*char zhuanYe[50];char adress[50];*/char name[20];struct LNode *next;}LNode,*Link;//****************创建链表结点************************************************************************** Link createLink(Link L){ //初始化定义函数,声明变量void inserStu(Link L,Link Elem);//定义插入函数int count(Link L);int temp;temp=count(L);printf("节点个数为%d:\n",temp);Link p;int num=1, stuNumber;char telenum[50];char name[20];int age;/* char deptName[50];char adress[50];char zhuanYe[50];*/char chass[50];//开始输出学生信息while(1){printf("请输入学生的信息:学号,姓名,年龄,班级,院系,专业,家庭住址,电话号码\n");printf("学号输入负数结束!\n");printf("请输入学号%d: ",num);scanf("%10d",&stuNumber);if(stuNumber<0) {break;}printf("请输入姓名%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入电话号码: ",num);getchar();gets(telenum);printf("请输入院系%d: ",num);getchar();gets(deptName);*/if(stuNumber>=0){p=(Link)malloc(LEN);p->stuNumber=stuNumber;strcpy(p->chass,chass);/* strcpy(p->deptName,deptName);*/p->age=age;strcpy(p->telenum,telenum);strcpy(p->name,name);//插入新结点inserStu(L,p);num++;}}return (L);}//******************打印头结点为L的学生记录********************************************************void printList(Link L){printf("\n*********************学号,姓名,年龄,班级,电话号码**************************\n");printf("\n 学号姓名年龄专业班级电话号码\n");int n=1;Link p=L;int count(Link L);int temp;temp=count(L);//结点个数:if(temp==0)printf("系统中没有元素\n");//判断学生管理系统中有无信息elsewhile(p->next!=NULL){printf("%2d %-9d",n,p->next->stuNumber);printf("%-8s %-5d %-12s %s \n",p->next->name, p->next->age,p->next->chass,p->next->telenum/*p->next->deptName*/);//首个字符打印不出来p= p->next;n++;}printf("\n****************************************************************** *****************\n");return;}//********************************插入学生信息**************************************void inserStu(Link L,Link Elem){Link prior(Link L,Link p);Link p=L->next;//*******%%%%****while(p!=NULL&&Elem->stuNumber>=p->stuNumber){if(p->stuNumber==Elem->stuNumber){printf("重复输入学号,输入失败!");return ;}p=p->next;}//确定Elem的插入位置if(p==NULL){p=prior(L,p);Elem->next=NULL;p->next=Elem;//若为空表,插入到头结点之后}else{p=prior(L,p);Elem->next=p->next;p->next=Elem;}}//***********************找到当前地址元素的前一元素的地址*************************************************************************Link prior(Link L,Link p){if(L->next==NULL)return(L);Link p_prior=L;while(p_prior->next!=p){p_prior= p_prior->next ;}return (p_prior);}//********************************8按学号查询学生信息***************************************************************************int searchName(Link L,char n[]){int flag=0;//标志要查找的学生和学生记录中的姓名是否匹配Link p=L->next;int seat=1;if(L->next==NULL||L==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(!strcmp(p->name,n))//比较要查找的姓名是否和当前学生信息所指的姓名匹配{flag=1;//输入姓名匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}p=p->next ;seat++;}}return flag;}//****************************************按学号查找学生信息*********************************************************************int searchNum(Link L,int n){int flag=0;//标志要查找的学生和管理信息系统中的学号是否匹配Link p=L->next;int seat=1;if(L->next==NULL)printf("没有学生信息\n");else{while(p!=NULL){if(p->stuNumber<=n){if(p->stuNumber==n)//比较要查找的学号是否和当前学生信息所指的学号匹配{flag=1;//输入学号匹配printf("要查找的是第%d位学生\n",seat);printf("学号是:%d 名字:%s 年龄:%d 班级:%s 手机号:%s\n",p->stuNumber,p->name,p->age,p->chass,p->telenum);}}p=p->next ;seat++;}}return flag;}//*******************************从通讯录中删除第i个元素*************************************************************************** void deleteElem(Link L,int i){Link p=L;int j=0;while(p->next&&j<i-1){p= p->next;j++;}if(!(p->next))//判断i时候合法,i不能大于元素的个数,也不能小于等于0{printf("第%d个学生删除失败\n",i);return;}Link q=p->next;p->next=q->next;free(q);}//*******************按姓名删除学生信息******************************************************************************* ***************int deleName(Link L, char n[]){ void deteStu(Link);int flag=0;//判断要删除的学生与系统中的姓名是否匹配Link p=L->next;int seat =1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);} else{while(p!=NULL){if(!strcmp(p->name ,n))//比较名字是否匹配{flag=1;printf("%s",p->name );p=p->next;deleteElem(L,seat);//删除第i个学生的信息}else{p=p->next ;seat++;}if(flag)printf("被删除了\n");}}return flag;}//*****************按学号删除学生信息*****************************************************************int deleNum(Link L,int n){ void deteStu(Link);int flag=0;Link p=L->next ;int seat=1;if(L->next==NULL){printf("\n删除提示:系统中没有元素,删除失败!\n");deteStu( L);}else{while(p!=NULL){if(p->stuNumber==n){flag=1;printf("%d",p->stuNumber);p=p->next;deleteElem(L,seat);break;}p=p->next ;seat++;}if(flag){printf("被删除了\n");}else{printf("没有找到学生信息\n");}}return flag;}//***************************************************************************** ********void searchWay1(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){printf("请输入要查询的学生的学号:\n");int n,s;scanf("%d",&n);s=searchNum(L, n);if(s==0)printf("查找失败\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//***************************************************************************** ***void searchWay2(Link L){ void searchMenu(Link L);int searchWay=0;//控制跳出循环,再次选择查询方式if(searchWay==0){char n[20];int flag;printf("请输入要查询的学生姓名\n");char temp2=getchar();gets(n);flag= searchName(L,n);if(flag==0)printf("查找失败!\n");searchWay=1;}if(searchWay==1){searchMenu( L);}}//*****************************************************************8void searchMenu(Link L){int mainMenu();printf(" ********************** 查询菜单************************************** \n");printf(" *** 1 输入学生学号查询学生信息\n");printf(" *** 2 输入学生姓名查询学生信息\n");printf(" *** 3 返回上级菜单\n");printf(" ********************** 查询菜单************************************** \n");printf("请选择1-3: ");int menu;scanf("%d",&menu);switch(menu){case 1:{ searchWay1(L);break;}case 2:{ searchWay2(L);break;}case 3:{break;//跳回主菜单程序}}}//************************************更新学生信息模块*****************************************void alterStu(Link L)//按学号更新学生信息{int n;printf("请输入要修改的学生学号:");scanf("%d",&n);Link p=L->next;if(p==NULL){printf("学生管理系统没有学生信息!");}while(p!=NULL)//循环查找学生信息,如果找到该学号则进入循环体更改学生信息{//***************************************************************************** *****************if(p->stuNumber==n){int num=1, stuNumber,age;char telenum[50];char name[20];char chass[50];printf("***********************更改学生信息*****************************************\n");printf("请输入学生的学号,姓名和电话号码\n");printf("请输入学号%d: ",num);scanf("%d",&stuNumber);printf("请输入姓名%d: ",num);getchar();gets(name);printf("请输入年龄%d: ",num);scanf("%d",&age);printf("请输入班级%d: ",num);getchar();gets(chass);printf("请输入电话号码: ",num);getchar();gets(telenum);p->age=age;p->stuNumber=stuNumber;strcpy(p->telenum,telenum);strcpy(p->name,name);strcpy(p->chass,chass);//更新新结点printf("***********************更改学生信息完毕*****************************************\n");//***************************************************************************** ********************}p=p->next;}}//****************保存学生信息模块*************************************************************************** void keepStu(Link L){Link p=L->next;FILE* fp;if((fp=fopen("student.txt","r"))==NULL)//打开文件,不存在此文件则新建{fp=fopen("E:\\测试\\student.txt","w");fclose(fp);}fp=fopen("E:\\测试\\student.txt","a");while(p!=NULL){fprintf(fp,"%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);p=p->next;}fclose(fp);printf("文件保存成功!\n");}//********************统计结点个数模块******************************************************************************* ****int count(Link L){int n=0;Link p=L->next;if(p==NULL){printf("不存在学生信息\n");}while(p!=NULL){p=p->next;n++;}return n;}//********************************导入学生信息模块**********************************************************************Link stuEntry(){FILE* fp;Link p,q ,L;if((fp=fopen("E:\\测试\\student.txt","r"))==NULL)//打开文件,不存在此文件则新建{;}L=q=(Link)malloc(LEN);printf("\n学号姓名手机号\n");printf("**********************************************************\n");while(!feof(fp)){p=(Link)malloc(LEN);fscanf(fp,"%d\t%s\t%s\n",&p->stuNumber,&p->name,&p->telenum);printf("\n%d\t%s\t%s\n",p->stuNumber,p->name,p->telenum);q->next=p;q=p;}q->next=NULL;fclose(fp);printf("按任意键结束:");getch();//返回return L;}//********************添加学生信息************************************************************************** void AddStu(Link L){ int temp;temp=count(L);printf("节点个数为%d:\n",temp);if(temp==0){createLink(L);}//如果没有学生信息则调用初始化函数createLink(L);}//****************删除学生菜单****************************************************void deteStu(Link L){int flag=0,way,n;printf("\n************************ 删除菜单********************\n");printf("\n选择操作方式************* 1:按学号********************\n");printf(" ************* 2:按姓名********************\n");printf(" ************* 3: 返回主菜单*********************\n");printf("\n请输入删除方式:");scanf("%d",&way);if(way<1||way>3){deteStu(L);}switch (way){case 1: {printf("请输入要删除的学生学号:");scanf("%d",&n);flag= deleNum(L,n);break;}case 2:{char n[20];printf("请输入要删除的学生姓名:");char temp1=getchar();gets(n);flag=deleName(L,n);break;}case 3:{break;}}if(flag){printf("删除成功!\n");deteStu(L);}}//**********************主菜单程序****************************************************************************** int mainMenu(){printf("\n****************************欢迎使用学生管理信息系统***********************************************\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("* *** 0 退出管理信息系统**** * \n");printf("****************************欢迎使用学生管理信息系统***********************************************");int menu=0;printf("请选择0-8:");scanf("%d",&menu);if(menu<0&&menu>8){printf("输入无效,请正确输入有效序号0-8:");scanf("%d",&menu);}return menu;}//**************************main()程序******************************************************************************* **********************void main(){Link L=(Link)malloc(LEN);//在主函数上首先让结构体指针初始化;L->next=NULL;int flag=0;//学生信息是否建立int menu=0;//菜单选项do{menu=mainMenu();switch(menu)//用于调用子菜单{case 1:{L=createLink(L);break;}case 2:{printList(L); break;}case 3:{searchMenu(L); break;}case 4:{alterStu(L) ;break;}case 5:{createLink(L);break;}case 6:{deteStu( L); break;}case 7:{keepStu( L); break;}case 8:{L=stuEntry();break;}case 0:{return;}}}while(1);}//***************************************************************************** *************************************************。
C语言课程设计报告——学生信息管理系统

C语言程序设计课程设计报告设计题目:学生信息管理系统专业电子信息工程班级学生指导教师年学期一、总体设计<一>.模块划分总体分为4大板块,分别为:1、输入信息模块:输入信息并将信息保存到文件当中:2、浏览信息模块:显示需要全部的学生信息:3、编辑信息模块:输入密码,修改或删除学生信息:4、修改密码模块:修改系统密码;5、系统初始化模块:删除保存的数据和修改后的密码,初始化系统。
<二>.数据结构#define N 100 /* 所能容纳的数据数量*/struct student{int number;char name[10];char gender[6];int birthday;char major[18];char Class[10];char address[30];char dormitory[10];}stu[N];<三>. 函数原型声明1、int menu1(); 主菜单输出函数2、int menu2(); 浏览选项子菜单输出函数3、int menu3(); 编辑选项子菜单输出函数4、void input(); 信息输入函数5、void scan(); 浏览学生信息子函数6、void display(); 信息显示函数7、void save(int n); 将输入的信息保存为文件8、void edit(); 编辑学生信息子函数9、void search(int s); 查找函数10、void revise_info(); 信息修改函数11、void code(); 密码管理函数12、void del(); 信息删除函数13、void recover(); 初始化程序二、功能实现1.main( )(流程图)2.各功能模块详细流程图(1)、输入信息模块输入人数——输入信息——保存信息至文件(2)、浏览信息模块①、全部显示:从文件中读取信息至结构体——输出信息②、按姓名查找:输入姓名——从文件中读取信息至结构体——查找姓名——输出信息③、按学号查找:输入学号——从文件中读取信息至结构体——查找学号——输出信息(3)、编辑信息模块①、修改信息:输入学号——从文件中读取信息至结构体——查找学号——选择修改项目——修改信息——保存信息至文件②、删除信息:输入学号——从文件中读取信息至结构体——查找学号——确认删除——删除信息——保存剩余信息至文件(4)、修改密码模块从文件中读取旧密码——输入旧密码——输入新密码——保存至文件——修改成功(5)、系统初始化模块删除原文件——建立空白文件三、测试及调试(测试方案、存在的问题及解决方法)1、主菜单与子菜单无法建立联系,即输入相应的选项后不能运行相应的子函数。
数据结构课程设计报告(附源代码)-学生管理系统

课程设计报告(一)一.报告题目:学生管理系统二.实验目的:1.熟悉线性链表,掌握线性链表的基本操作;2.练习求线性表中指定结点元素及修改指定结点的元素、求指定结点的前驱/后继元素、删除指定结点的元素、在指点节点位置插入元素等。
3.通过文件保存和读取文件来提升文件操作的能力;4.C语言编程能力的提升训练。
三.实验环境:C语言编程,VC++6.0编程工具实现。
四.软件系统结构1.总体架构/层次:2.各功能的实现流程图:函数6:文件装入功能实现流程图函数7:文件保存功能实现流程图函数8:退出菜单功能实现流程图五.软件功能设计:本软件是要编写一个学生管理系统,一个学生有很多相关数据,包括学号、姓名、性别、年龄、家庭住址、练习电话,因此我们利用线性链表的知识来编写程序,这是因为线性链表有很多优良的特点,因此该程序是对线性链表的应用练习。
本软件利用线性链表的特点,结合文件相关函数的运用,它能够实现以下功能:1.用结点的数据域存放学生的学号、姓名、性别、年龄、家庭住址、练习电话;2.利用结点的指针域访问某个结点的前驱或者后继;3.录入新学生信息并按非降序插入到链表中;4.查找给定学号的结点学生信息;5.删除给定学号的结点学生信息;6.修改给定学号的结点学生信息;7.显示全部结点的学生信息;8.将链表中的学生信息全部存入文件;9.将已存在的学生信息文件中的学生信息按学号非降序插入到当前链表中;六.源程序代码:#include<stdio.h>#include<string.h>#include<stdlib.h>#include<windows.h>#define NAMELEN 15#define ADDRLEN 10#define TELLEN 15#define OVERFLOW 0#define ERROR 0#define FALSE 0#define OK 1#define TRUE 1struct stud{ long num;char name[NAMELEN+1];char sex;int age;char Addr[ADDRLEN+1];long rxsj;char lxfs[TELLEN+1];};typedef stud ElemType;//链表结点元素为结构体FILE *fp;typedef struct LNode{ElemType data;LNode *next;} *LinkList;//typedef LNode *;int InitList(LinkList &L){ //操作结果:构造一个空的线性表LL=(LinkList )malloc(sizeof(LinkList));//产生头结点,并使L指向头结点if(!L)//存储分配失败exit(OVERFLOW);L->next=NULL;// 指针域为空return OK;}int ListTraverse(LinkList L,void(*vi)(ElemType)){//条件:线性表已存在//操作结果:一次对L的每个数据元素调用函数vi()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告题目一、学生管理系统的设计与实现——采用顺序表结构实现题目二、图的算法实现——采用邻接表和邻接矩阵结构实现班级:__计算机101______________姓名:__刘文辉_________________指导教师:__董跃华_________________成绩:__________________________信息工程学院2012 年06月18 日目录1需求分析 (3)1.1 目的 (3)1.2 功能 (3)2详细设计 (3)2.1 数据类型 (4)2.2 总体功能流程图 (4)2.3 伪码算法 (5)3调试分析 (14)3.1 遇到的问题 (14)3.2 算法的时空分析 (14)3.3改进设想 (14)3.4经验体会 (14)4测试结果 (15)5参考文献 ........................................................................................................................ 错误!未定义书签。
1、需求分析1.1、目的设计并实现一个学生管理系统,即定义一个包含学生信息(学号,姓名,成绩)的的顺序表,可以不考虑重名的情况①熟练查找和排序的数据结构算法②熟练掌握数据结构③复习C语言的各个知识点1.2、功能(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 给定一个学生信息,插入到表中指定的位置;(4) 删除指定位置的学生记录;(5) 统计表中学生个数;(6) 利用直接插入排序或者折半插入排序按照姓名进行排序;(7) 利用快速排序按照学号进行排序;(8) 根据姓名进行折半查找,要求使用递归算法实现,成功返回此学生的学号和成绩;(9) 根据学号进行折半查找,要求使用非递归算法实现,成功返回此学生的姓名和成绩。
2、详细设计2.1、数据类型1、本次程序采用顺序存储结构,利用结构体数组的优点进行设计。
ADT List{数据对象:D={ai|ai∈Elemset,i=1,2,……n,n>=0}数据关系:R1={<a(i-1),a(i)>|a(i-1),a(i) ∈D,i=2,………n}基本操作:Last_locate()操作结果:得到最后一个元素的位置基本操作:Stu_Insert()操作结果:学生信息的插入基本操作:Stu_Insert_appoint()操作结果:学生信息插入到指定位置基本操作:Stu_Delete_appoint()操作结果:删除某位置上的学生信息基本操作:Stu_OutAll()操作结果:学生信息的输出基本操作:Stu_Count()操作结果:学生个数的统计基本操作:InsertSort()操作结果:按姓名直接排序基本操作:Stu_Partition(int low,int high)操作结果:按学号快速排序基本操作:Stu_Search_Bin ()操作结果:非递归折半查找基本操作:DG_Stu_Search_Bin(char key[10],int low,int high) 操作结果:递归折半查找}ADT List}2.2、总体功能流程图1、功能模块2、主界面流程图2.3、伪码算法1、插入操作的伪代码及流程图int Stu_Insert(){scanf("%d",&n);for(i=0;i<n;i++){ scanf("%d",&stu[i].number);scanf("%s",&stu[i].name);scanf("%d",&stu[i].score);}return 1;}2、插入学生信息到指定位置的伪代码及流程图int Stu_Insert_appoint(){scanf("%d",&j);//j为插入的位置for(i=Last_locate();i<=j;i--)//进行元素后移操作{tu[i+1].number=stu[i].number;stu[i+1].name[15]=stu[i].name[15];stu[i+1].score=stu[i].score;}scanf("%d",&stu[j].number);scanf("%s",&stu[j].name);scanf("%d",&stu[j].score);}3、删除指定位置的学生信息的伪代码及流程图int Stu_Delete_appoint(){scanf("%d",&j);free(stu[j])for(i=j+1;i<=Last_locate();i++){stu[i-1]=stu[i];}return 1;}4、学生信息的全部结果输出的伪代码及流程图int Stu_OutAll(){int i=0;while(stu[i].number){printf("%d\t\t",stu[i].number);printf("%s\t\t",stu[i].name);printf("%d\t\t\n",stu[i].score);i++;}return 1;}5、学生数量统计的伪代码及流程图int Stu_Count(){int i=0;while(stu[i].number){i++;}printf("学生总人数:\t");printf("%d",i);return 1;}6、快速排序的伪代码及流程图int Score_Partition(){Privotkey = stu[low].key;While(low<high){While(low<high&&stu[high].key>=privotkey) –high;Stu[low]←→Stu[high]While(low<high&&Stu[low].key<=privotkey) ++low Stu[low]←→Stu[high]}return low;}7、直接插入排序伪代码及流程图V oid InsertSort(){For(i=2;i<= Last_locate();++i){If(LT(stu[i].key,stu.[i-1].key)){Stu[0]=stu[i]Stu[i]=stu[i-1]For(j=i-2;LT(stu[0].key,stu[j].key);--j)Stu[j+1]=stu[j];Stu[j+1]=stu[0]}}}8、折半查找非递归伪代码及流程图int Search_Bin (SSTable ST, int key ) {int low, high, mid;low = 1; high = ST.length;while (low <= high) {mid = (low + high) / 2;if (key==ST.elem[mid].key) return mid;else if (key<ST.elem[mid].key) high = mid - 1;else low = mid + 1;}return 0;}9、折半查找递归伪代码及流程图int DGSearch_Bin (SSTable ST,int key,int low,int high){ int lo, hig, mi;low = 1; hig = ST.length;mid = (lo + hig) / 2;if(ST.elem[mi].key==key) return mid;if(ST.elem[mi].key>key) return D(ST,key,lo,mi-1);if(ST.elem[mi].key<key) return D(ST,key,mid+1,high);return 0;}3、调试设计3.1、遇到的问题几乎没什么大问题3.2、算法的时空分析T(n)=O(n2)3.3、改进设想在进入某个功能模块时,或者某个功能的某个步骤时,可以允许出现输入错误,因此,要实现进入某个步骤时实现撤销操作…..3.4、经验体会由于第一次写这么复杂的程序,开始有点无从下手,在选择合适的数据结构的时候不知道怎么去选,只能一个一个的去试,最后从结合了C语言的结构体和程序需要用到的算法中慢慢摸索到了合适的数据结构,写程序时会出现好多小的语法问题或者逻辑问题,一点点逻辑问题就会让人抓狂。
但最后还是静下心来梳理情绪,慢慢的找到了问题。
开始的时候没有好好理解折半插入排序。
便把第0个位置也存了信息。
导致哨兵没地方放。
然后又全部修改了。
也许哨兵不一定要放在第0个位置。
但开始遇到的这个问题时,脑子里就只有一个想法,就是全部把信息结构修改一遍,虽然这看起来不是个好方法,但对于这种小程序来说,还是比较容易修改。
总体来说,收获很大。
4、测试结果4.2查询学生信息4.3添加学生信息到指定位置4.4删除学生信息4.5按姓名递归折半查找4.6按学号快速排序5、参考文献1、数据结构(C语言版)——严蔚敏、吴伟民2、C程序设计(第三版)——谭浩强。