c++学生信息查询.docx

上传人:牧羊曲112 文档编号:3153842 上传时间:2023-03-11 格式:DOCX 页数:12 大小:40.87KB
返回 下载 相关 举报
c++学生信息查询.docx_第1页
第1页 / 共12页
c++学生信息查询.docx_第2页
第2页 / 共12页
c++学生信息查询.docx_第3页
第3页 / 共12页
c++学生信息查询.docx_第4页
第4页 / 共12页
c++学生信息查询.docx_第5页
第5页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《c++学生信息查询.docx》由会员分享,可在线阅读,更多相关《c++学生信息查询.docx(12页珍藏版)》请在三一办公上搜索。

1、c+学生信息查询计算机实习报告 一、 题目:建立一个数据表文件,完成对该文件的增、删、改、查功能。如:文件filedbf存放学生数据,每个学生的数据项包括:学号、姓名、性别、年龄和奖学金。 编写实现如下功能的程序: 1) 建立filedbf文件 2) 增加学生纪录 3) 根据学号删除该学生的数据 4) 根据学号修改该学生的数据 二、 题目分析 该题目主要用到链表的相关知识,结构体、指针的运用也比较多,此外,一些常用的删除、排序操作也都有所涉及。编此程序的关键我认为是弄清链表的的结构。在程序中多多选择自函数的调用,主函数会比较简短,使程序的结构看起来更清晰。在程序中每个功能各为一个子函数,还有一

2、些常用的函数,例如查找、显示等,也定义了子函数,便于经常调用。 三、 程序设计 函数之间调用关系: 1.创建链表(createset) 2.添加记录(addnew) 3.删除学生记录(deletestu)查找学号是否存在(findno) 主函数4.查找信息(stuselect)查找该学生(findno)显示(display) 5.显示所有 排序(numsort)逐个显示(display) 6.修改信息(modify)查找该学生(findno)显示原始信息(display)修改后显示新信息(display) 7.退出 开始 是 Menu=7? 否 =7 Menu =1 创建链表头 添加信息 删除

3、纪录 查询纪录 显示所有 修改信息 退出 结束 四、 调试分析 1.性别定义为2字节时,输出时总与奖学金连着输出。例:男一等。中间没有分隔。 解决方法:将性别定义为4个字节即可。使回车符有空间存放。 2.每次添加完一条信息时都必须返回主菜单重新选择,而不能批处理。 解决方法:加入了一个do while循环,由用户选择是否返回到主菜单。 五、 使用方法 大部分按照提示操作即可,在提示选择Yes或者No时,只需输入Y或N即可,不必输入完整单词。学生信息如姓名、性别等直接可输入汉字,显示也将是汉字。 六、 实习体会 本次实习的题目难度我感觉属于中等,完全可以根据已经学过的c知识编出来,但由于学过c时

4、间稍长,许多语法及注意事项都已忘记。在实习中通过自己不断的摸索,并且到图书馆查阅相关资料,不仅复习了原有的知识,而且还学到了一些原来没有学到的东西,虽然有好多东西最后没有在程序里用到,但仍然是不小的收获。 七、 源程序及注释 #include /*标准输入输出库*/ #include /*字符串操作库*/ #include /*控制台函数库*/ #include /*内存分配库*/ #include /*进程库*/ #define INITSIZE 100 /*初始化学生记录的条数*/ #define INCSIZE sizeof(student) /*初始化空间不足时,增加存储空间的字节数*

5、/ typedef struct long no; /*学生序号*/ char name10; /*学生姓名*/ char sex4; /*学生性别*/ char scholarship6; /*奖学金*/ int age; /*年龄*/ student; /*定义学生结构体*/ int maxsize=INITSIZE; /*初始化记录条数*/ int num=0; /*当前学生记录条数*/ int dbnull=1; /*数据库是否存在的标志*/ /*以下为所有函数的声明*/ int createset(student *t); void addnew(student *t); void

6、deletestu(student *t); void stuselect(student *t); int findno(student *t,int no); void display(student *t,int no); void swap(student *t, int i,int j); void modify(student *t); /*以下为函数实现*/ int createset(student *t)/*创建数据记录集*/ char ask ; if (num!=0) /*存在学生记录*/ printf(已存在一个数据库,覆盖(Y/N)?); ask=getch; /*是

7、否覆盖数据库*/ if (ask = y|ask=Y) free(*t); /*若选择覆盖,则释放现存存储空间,学生记录个数清零*/ num =0; else return 0; /*不选择覆盖,则退出*/ *t =(student *)malloc(INITSIZE*sizeof(student); /*分配INITSIZE个学生记录所需空间*/ if (!t) printf(内存不足); /*内存不足,退出程序*/ exit(0); else printf(新文件已创建.n); /*分配成功,成功创建数据库*/ dbnull=0; /*数据库存在标志设为0(表示存在)*/ return 1

8、; void addnew(student *t) /*向数据库插入学生记录*/ student temp;char insure; if (dbnull) /*数据库存在标志不为0,即无数据库,操作失败*/ printf(不存在文件,请先创建.); return; if (num+1maxsize) /*当前记录个数大于初始化记录条数,追加空间*/ t =(student *)realloc(t,maxsize+INCSIZE); /*追加一个记录所需空间*/ if (!t) /*内存不足,追加失败*/ printf(内存不足.n); exit(0); do printf(输入学生信息:学号

9、,姓名,性别,奖学金,年龄.n); if (scanf(%ld%s%s%s%d,&(temp.no), /*输入学生数据*/ temp.name, &(temp.sex), &(temp.scholarship),&(temp.age) if (findno(t,temp.no) = -1) /*查找输入的学号是否与数据库的重复*/ tnum.no = temp.no; /*学号不冲突,则把输入的记录存放到数据库末端*/ strcpy(tnum.name,temp.name); strcpy(tnum.sex,temp.sex); strcpy(tnum.scholarship,temp.sc

10、holarship); tnum.age = temp.age; num+; /*当前记录数加一*/ printf(添加成功!是否继续添加(yes/no)n); insure=getch; else printf(该学号已存在,添加失败.n,temp.no);/*输入学号已经存在,添加记录失败*/ else printf(输入格式错误,添加失败.n); /*输入函数出错,表示输入格式错误,添加失败*/ while(insure=Y|insure=y);/*如果继续添加则返回前面继续添加,否则退出*/ void deletestu(student *t) /*从数据库删除某条学生记录*/ lon

11、g delno =0;int index;int i =0; if (dbnull) printf(文件不存在,请先创建.); return; printf(输入要删除的学生的学号:n); scanf(%ld,&delno); /*输入要删除的学生的学号*/ index = findno(t,delno); /*按学号方式查找该学生是否存在*/ if (index != -1) /*该学生存在,则删除他*/ for (i=index+1;i=num;i+) /*数据库记录前移,完成删除操作*/ ti-1.no = ti.no; strcpy(ti-1.name,ti.name); strcpy

12、(ti-1.sex,ti.sex); strcpy(ti-1.scholarship,ti.scholarship); ti-1.age = ti.age; num-; /*当前记录数减一*/ printf(删除成功!n); else printf(无该学号的学生,删除失败n); /*无该学号的学生,删除失败*/ void stuselect(student *t) /*搜索数据库*/ long tempno =0; if (dbnull) printf(Not exsist database select menu 1 to create database.); return; printf

13、(输入要查询的学号.n); scanf(%ld,&tempno); /*输入学号*/ tempno =findno(t,tempno); /*查找该学生*/ if ( tempno!= -1 ) printf(查询成功!.n);/*查询成功,打印之*/ display(t,tempno); else printf(查找失败.n); /*查找失败*/ void modify(student *t) /*修改学生信息*/ long tempno =0;student temp;char insure; if (dbnull) printf(文件不存在,请先创建.); return; do prin

14、tf(请输入要修改的学号.n); scanf(%ld,&tempno); /*输入学号*/ tempno =findno(t,tempno); /*查找该学生*/ if ( tempno!= -1 ) printf(原始信息:n);/*查询成功,显示原始信息*/ display(t,tempno); printf(请输入要修改学生的姓名,性别,奖学金,年龄.n); scanf(%s%s%s%d, /*输入学生新信息*/ &temp.name, &(temp.sex), &(temp.scholarship),&(temp.age); strcpy(ttempno.name,temp.name)

15、;/*修改信息*/ strcpy(ttempno.sex,temp.sex); strcpy(ttempno.scholarship,temp.scholarship); ttempno.age=temp.age; printf(确定:(YES or NO)n); display(t,tempno); getch; scanf(%c,&insure); printf(修改成功); else printf(该学号不存在.n); /*查找失败*/ while(insure=N|insure=n);/*如果修改错误返回继续修改*/ int findno(student *t,int no)/*按学号

16、查找学生记录*/ int count =0; for (count =0; countno=no) /*逐个搜索,若该学生记录的学号等于需要查找的学号,则返回该学号*/ return count; return -1; /*搜索完毕,仍没有匹配学号,则返回-1*/ void display(student *t,int no) /*打印指定学生记录*/ printf(学号:%ld 姓名:%s 性别:%s 奖学金:%s 年龄:%d.n, tno.no, tno.name, tno.sex, tno.scholarship, tno.age); void numsort(student *t) /

17、*学号成绩排序,使用选择排序算法*/ int i,j,count; for ( i =0; i num-1; i+) for ( j =i+1; jnum; j+) if ( tj.no ti.no ) swap(t,j,i); printf(以下是全部信息:n); for (count =0;count创建新文件n 2添加记录n 3删除记录n 4查询n 5显示所有记录n 6修改记录n 7退出系统n); printf(n按序号选取您要的操作n); Menu = getchar; /*选择菜单*/ switch (Menu) /*按选择的菜单项,执行相应模块*/ case 1: createse

18、t(&t); break; case 2: addnew(t); break; case 3: deletestu(t); break; case 4: if (dbnull) /*数据库不存在,不予以处理*/ printf(不存在数据表,请先创建); else fflush(stdin); stuselect(t); break; case 5:numsort(t);break; case 6:modify(t);break; case 7:break; default:break; printf(tttttt按任意键退出.); fflush(stdin); getch; /*按任意键返回*/ printf(结束*学生信息管理系统*n);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号