收藏 分销(赏)

学生信息管理系统课程设计实验报告.doc

上传人:天**** 文档编号:10597218 上传时间:2025-06-04 格式:DOC 页数:32 大小:265.54KB 下载积分:12 金币
下载 相关 举报
学生信息管理系统课程设计实验报告.doc_第1页
第1页 / 共32页
学生信息管理系统课程设计实验报告.doc_第2页
第2页 / 共32页


点击查看更多>>
资源描述
*********大学 课 程 设 计 报 告 课程名称 高级语言程序设计 设计题目 学生信息管理系统 专 业 计算机科学及技术 班 级 学 号 姓 名 完成日期 课 程 设 计 任 务 书 设计题目: 学生信息管理系统设计 设计内容及要求: 内容: 对学生信息进行管理,学生信息包括学号、姓名、性别、年龄、学历、学号、住址、电话等(学号不重复)。 要求: (1) 系统以菜单方式工作 (2) 学生信息录入功能(学生信息用文件保存) 。 (3) 输出学生信息、浏览学生信息功能。 (4) 查询和排序功能:(至少一种查询方式) ,如按学号查询、按学历查询等。 (5) 学生信息删除、修改功能(任选项)。 指导教师:_______________ 年 月 日 课 程 设 计 评 语 成绩: 指导教师:_______________ 年 月 日 28 / 32 【问题描述】 学生信息管理软件设计。对学生信息进行管理,学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一个学生信息管理软件。 【基本要求】 一、输入形式和输入值范围 形式:用scanf输入学生学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。输入一个学生信息一个回车。用输入学号p1->num来控制输入,当输入学号为0时,用break跳出循环。即if(p1->num==0)break。 输入值范围: 学号、年龄为整型 long num; int age; 姓名为字符串型15个字节char name[15]; 性别为字符串型,10个字节char sex[10]; 出生为字符串型,20个字节char chushen[20]; 地址为字符串型,30个字节char dizhi[30]; 邮箱为字符串型,输入11位数字char email[11]。 二、输出形式 输出是以表格形式输出,即表格每一行都能显示第一个学生信息,第二行是显示第二个学生信息。 三、程序所能达到功能 对学生信息进行管理,学生信息包括职学号,姓名,年龄,性别,出生年月,地址,电话,E-mail。 (1)系统以菜单方式工作 (2)学生信息录入功能。 (3)输出学生信息、浏览学生信息功能。 (4)查询和排序功能:(至少一种查询方式),如按学号查询、按姓名查询等。 (5)学生信息删除、修改功能(任选项)。 (6)添加学生信息。 【测试数据】 输入:设输入四个学生信息,以最后一个学生学号为0来结束输入,学号是整型。 预期输出结果:预期输出结果请参见程序后运行结果。 【数据结构】 排序记录数据元素表采用一维数组存储结构,每个元素包含8个关键字段,其类型描述为: #include<stdio.h> #include<malloc.h> //分配size字节存储区 #include<string.h> //包含字符串处理函数头文件,可以直接调用现有字符串处理一系列函数 #define len sizeof(struct student) //宏定义求字节运算符 #include<stdlib.h> //清屏功能 struct student //声明一个结构体类型struct student { long num; //定义学号为long型数据 char name[15]; //定义姓名 int age; //定义年龄 char sex[3]; //定义性别 char chushen[10]; //定义出生 char dizhi[20]; //定义出生地址 char phone[11]; //定义电话 char email[20]; //定义邮箱 struct student *next; //next是指针变量,指向结构体变量 【算法思想】 利用一维结构体存放所有学生信息,输入后,在输出时要对学生按学号高低排序,然后可以执行按学号查询学生信息,输入学号,删除学生信息,输入学号可以找出该学生信息,然后选择修改学生信息,如果来了新学生,还可以添加学生信息。 【总体设计】 输入一个学生学号,来删除该学生信息 输入学号,修改的学生信息 显示主菜单 输入函数 学生排序 输出学生信息 删除学生信息 修改学生信息 添加学生信息 用键盘输入学生信息 按学生学号高低排序 在原有的学生上添加学生信息 以表格的形式输出学生信息 主菜单包括:输入函数、学号排序、浏览函数、删除函数、修改函数、添加函数。 图1-1学生管理总体设计 【模块划分】 一、主函数:main() 显示系统工作菜单,显示该系统所有功能。告诉使用者所有将会调用被 调函数,再运用选择函数switch即可根据使用者所输入学号进入对应功能程序。并且对菜单做了一个循环,进行完一个选择后,按回车键可进行清屏功能,把屏幕上除了主菜单以外都清空,然后可以继续选择那些可以使用功能,这样可以方便使用者使用,并且每一步都很清晰。以8退出系统。 二、输入函数:struct student *creat() 在该程序前面已经定义了一个结构体struct student用来储存学生所有信息,(学号、年龄、姓名、性别、出生日期、地址、电话、邮箱)。定义p1和p2,struct student *p1,*p2;p1,p2是指向struct student类型数据指针变量。定义一个n=0,n是输入个数,主要作用是:如果输入一个学生信息,首地址指向p1,head=p1;否则p2下一个地址指向p1,p2指向p1. p2->next=p1;p2=p1;学号控制循环。 三、排序函数:void paixu(struct student *head) 用一个for语句做循环,不是NULL话,指针指向下一个,按学生学号高低排序。整形直接交换,字符型用strcpy交换,类型相当于两个数据之间交换。 四、输出函数:void printlist(struct student *head) 在主函数里边用while控制循环,输出学生信息,然后指针指向下一个。 五、 查询函数:void findList_num(struct student *head) 和 void findList_num(struct student *head) 输入一个学号或姓名,做一个for循环,即指针pt指向第一个地址,再定义一个指针p1,让它等于pt,他是紧跟着pt后面一个指针,让p1->next不等于NULL,pt指向下一个地址。这样就能修改最后一个学生信息了。如果要查询学生学号在学生里,就输出该学生信息,否则,就输出查询学生信息不存在。 六、删除函数:int shanchu(struct student *head) 输入一个学号,先找到这个学生信息。如果输入学号在学生信息中,就进行以下循环:如果输入是第一个学生话,就head等于第二个学生信息;如果输入学生信息是最后一个,就让倒数第二个等于NULL;否则话,就让下一个学生信息覆盖前一个。如果输入学号不在学生信息中,输出“此学生信息不存在”。 七、修改函数:struct student *delList(struct student *head,long del_num) 输入要修改学号,找到该学生并且输出该学生信息。然后屏幕上会出现学生信息所有项目,用switch进行选择修改项目。选择后输入新学生信息,用它来覆盖原来学生信息。 八、添加函数:void insert(struct student *head) 用一个while语句while(p2->next!=NULL)控制循环,p2指针指向下一个地址,即p2=p2->next;这是找到最后一个地址,然后开辟动态存储区,p1=(struct student *)malloc(len);输入要添加学号,用学号为0来终止循环,如果不为0,就继续输入学生信息。 【源程序】 #include<stdio.h> #include<malloc.h> //分配size字节存储区 #include<string.h> //包含字符串处理函数头文件,可以直接调用现有字符串处理一系列函数 #define len sizeof(struct student) //求字节运算符 #include<stdlib.h> //清屏功能 FILE *fp; struct student //声明一个结构体类型struct student {int num; //学号为整型 char name[20]; //姓名为字符串 char genter[10]; //性别为字符串 int age; //年龄为整型 char xueli[20]; //学历为字符串 int gongzi; //学号为整型 char address[30]; //地址为字符串 char phone[11]; //电话为字符串 struct student *next; //next是指针变量,指向结构体变量 }; void menu() { 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("=====================================\n"); } struct student *creat() //录入学生信息 { int n; struct student *head; struct student *p1,*p2; n=0; p1=p2=(struct student *) malloc(len); scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p1->num,&p1->age,p1->name,p1->sex,p1->chushen,p1->dizhi,p1->phone,p1->email); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p2->next=p1; p2=p1; p1=(struct student *)malloc(len); scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p1->num,&p1->age,p1->name,p1->sex,p1->chushen,p1->dizhi,p1->phone,p1->email); } p2->next=NULL; return(head); } void insert(struct student *head) //插入学生信息 { int search_num; struct student *p,*q,*s; p=head; printf("在哪个学生前插入 请输入学号:\n"); scanf("%d",&search_num); while((p!=NULL)&&(p->num!=search_num)) { q=p; p=p->next; } s=(struct student *)malloc(len); q->next=s; system("cls"); printf("请输入学生信息:\n"); printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n"); scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&s->num,&s->age,s->name,s->sex,s->chushen,s->dizhi,s->phone,s->email); s->next=p; } void printList(struct student *head) //浏览全部学生信息 { struct student *p; p=head; if(head==NULL) printf("没有学生信息!!\n"); else { do { fread(p,len,1,fp); printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email); p=p->next; }while(p!=NULL); } } void findList_num(struct student *head,long search_num) //按学号查找 { struct student *p; p=head; while((p!=NULL)&&(p->num!=search_num)) p=p->next; if(p!=NULL) printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email); else printf("没有该学生信息!!\n"); } void findList_name(struct student *head,char *search_name) //按姓名查找 { struct student *p; int cmp1=0,cmp=0; p=head; while(p!=NULL) if(strcmp(p->name,search_name)!=0) { p=p->next; cmp++; } else { printf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\n",p->num,p->age,p->name,p->sex,p->chushen,p->dizhi,p->phone,p->email); p=p->next; cmp1=1; } if(cmp!=0&&cmp1==0) printf("没有该学生信息!!\n"); } void xiugai(struct student *p1,long xiu_num) //修改学生信息 { struct student *p2; p2=p1; while((p2!=NULL)&&(p2->num!=xiu_num)) p2=p2->next; if(p2!=NULL) { scanf("%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&p2->num,&p2->age,p2->name,p2->sex,p2->chushen,p2->dizhi,p2->phone,p2->email); } else printf("没有该学生信息!!\n"); } struct student *delList(struct student *head,long del_num) // 删除学生信息 { struct student *p,*q; p=head; q=head; while(p &&(p->num != del_num)) { q=p; p=p->next; } if(p==NULL) printf("无此学号!\n"); else{ if(p == head) { head = p->next; free(p); } else{ q->next = p->next; free(p); } } return head; } void paixu(struct student *head) //按学号排序 { struct student *p,*f,*t; char ch[100]; int i; t=f=p=head; for(p=head;p->next!=NULL;p=p->next) { for(t=head,f=t->next;t->next!=NULL;t=t->next,f=f->next) { if(t->num>f->num>0) { i=t->num; t->num=f->num; f->num=i; i=t->age; t->age=f->age; f->age=i; strcpy(ch,t->name); strcpy(t->name,f->name); strcpy(f->name,ch); strcpy(ch,t->sex); strcpy(t->sex,f->sex); strcpy(f->sex,ch); strcpy(ch,t->chushen); strcpy(t->chushen,f->chushen); strcpy(f->chushen,ch); strcpy(ch,t->dizhi); strcpy(t->dizhi,f->dizhi); strcpy(f->dizhi,ch); strcpy(ch,t->phone); strcpy(t->phone,f->phone); strcpy(f->phone,ch); strcpy(ch,t->email); strcpy(t->email,f->email); strcpy(f->email,ch); } } } // return head; } void save(struct student *head) //保存为磁盘文件 { struct student *p; if((fp=fopen("keshe","w"))==NULL) //打开一个文件 { printf("cannot open this file\n"); exit(0); } p=head; while(p!=NULL) { fprintf(fp,"%d\n",p->num); fprintf(fp,"%d\n",p->age); fprintf(fp,"%s\n",p->name); fprintf(fp,"%s\n",p->sex); fprintf(fp,"%s\n",p->chushen); fprintf(fp,"%s\n",p->dizhi); fprintf(fp,"%s\n",p->phone); fprintf(fp,"%s\n",p->email); p=p->next; } fclose(fp); } struct student *read() //从磁盘读取文件 { struct student *head=NULL; struct student *p=NULL; struct student *t=NULL; int a; // fp=fopen("keshe","r"); if((fp=fopen("keshe","r"))==NULL) //打开一个文件 { printf("cannot open this file\n"); exit(0); } while(1) { t=(struct student *)malloc(len); a=fscanf(fp,"%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s",&t->num,&t->age,t->name,t->sex,t->chushen,t->dizhi,t->phone,t->email); if(a==0||a==-1) return head; t->next=NULL; if(p==NULL) { p=t; head=t; } else { p->next=t; p=p->next; p->next=NULL; } } fclose(fp); } void main() //主函数 { int code=0; struct student *pt = NULL; for(code=1;;code++) //控制循环 { menu(); //调用菜单函数 printf("请输入序号:\n"); //提示输入序号 scanf("%d",&code); system("cls"); //清屏(下边也是这样功能) switch(code) //选择序号进行功能选择 { case 1: { system("cls"); printf("===========================输入学生信息 ==============================\n"); printf("---------------------------------------------------------------------\n"); printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n"); pt=creat(); //调用输入函数 save(pt); //将数据存储到磁盘中 system("cls"); printf("===========================输入学生信息 ==============================\n"); printf("---------------------------------------------------------------------\n"); printf("************成功输入学生信息***********!!\n\n"); printf("按回车键返回主菜单\n"); getchar(); getchar(); //按回车键返回 system("cls"); };break; case 2: { system("cls"); printf("===========================学生信息表 ================================\n"); printf("---------------------------------------------------------------------\n"); printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n"); printList(read()); //调用输出函数(是从磁盘中读出) printf("============================= ========================================\n"); printf("---------------------------------------------------------------------\n"); printf("\n按回车键返回主菜单\n"); getchar(); getchar(); system("cls"); };break; case 3: { int search=0; system("cls"); printf("===========================查询学生信息==============================\n"); printf("---------------------------------------------------------------------\n"); while(search!=3) //进入查询功能函数 { printf("1、按学号查询\n2、按姓名查询\n3、退出查询\n"); scanf("%d",&search); //插入查找方式 switch(search) { case 1: //选择学号查询 { long search_num; system("cls"); printf("请输入学生学号\n"); scanf("%d",&search_num); system("cls"); printf("===========================查询结果==================================\n"); printf("---------------------------------------------------------------------\n"); printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n"); findList_num(read(),search_num); //调用查找函数,将数据从磁盘中读出 printf("=========================== ==========================================\n"); printf("---------------------------------------------------------------------\n"); printf("\n按回车键返回查询菜单\n"); getchar(); getchar(); system("cls"); };break; case 2: //按姓名查找 { char search_name[15]; system("cls"); printf("请输入学生姓名\n"); scanf("%s",search_name); //输入要查找学生姓名 system("cls"); printf("===========================查询结果============== ====================\n"); printf("---------------------------------------------------------------------\n"); printf("学号\t年龄\t姓名\t性别\t出生\t地址\t电话\te-mail\n"); findList_name(read(),search_name); //调用姓名查找函数 printf("=====================================================================\n"); printf("---------------------------------------------------------------------\n"); printf("\n按回车键返回查询菜单\n"); getchar(); getchar(); system("cls"); }; } } system("cls"); };break; case 4: //删除学生信息 { long del_num; system("cls"); printf("===========================删除学生信息 ==============================\n"); printf("---------------------------------------------------------------------\n"); printf("请输入要删除学生信息学号:\n"); scanf("%d",&del_num); //输入要删除学号 system("cls"); pt=delList(read(),del_num); //调用删除函数 save(pt); printf("=========================删除结果================================\n"); printf("--
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服