学生学籍管理系统C课程设计报告-正文.doc
经济学院(国际经济与贸易)专业MIS课程设计(2011 2012学年) 设计名称: 学籍管理系统 班 级:国贸21003班 - 姓 名:廉鹏、宁二龙、俞鸿辉、曾光明 - 指导教师:信管教研室 - 成 绩: - 序 号: 二0一二年5月31日目 录1 前言22 需求分析22.1 课程设计目的22.2 课程设计任务22.3 设计环境32.4 开发语言32.5 系统可行性分析33 分析和设计43.1 功能分析43.2 系统流程图43.3 主要模块的流程图54 E-R图.7.5.数据字典96 具体代码实现107 课程设计体会17参考文献171 前言现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该努力学习科学文化知识,以适应社会的发展要求。以现代化的科学知识为祖国做贡献。计算机C语言课程设计是一门实践性很强的课程,因此,我们可以从这里出发,将实践教学与理论教学达到密切结合。根据实际题目,要求我小组编写一个程序来,用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。通过一个结构体数组来存放输入的每一位同学的信息(包括学号,姓名,性别,年龄,籍贯,系别,专业,班级),然后将其信息存入文件中。输入一个学号查询该同学的信息,并显示在屏幕上。2 需求分析本系统为了实现学校在校学生、离校学生各项信息资源的查询、统计、添加、删除、维护与管理,方便用户的管理与需求。学籍管理系统的系统分析的重点是对学籍管理信息系统的业务流程进行描述,通过采用流程图中的部分图形来对学生信息质量的管理活动进行规范化说明。2.1 课程设计目的用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。2.2 课程设计任务(1) 系统以菜单方式工作。(2) 登记学生的学号,姓名,性别,年龄,籍贯,系别,专业,班级;修改已知学号的学生信息;(3) 删除已知学号的学生信息;(4) 查找已知学号的学生信息;(5) 显示同一系学生信息和统计人数;(6) 显示所有学生信息和统计人数人数;2.3 设计环境(1)WINDOWS 2000/2003/XP/7/Vista系统(2)Visual C+或TC集成开发环境2.4 开发语言C+语言2.5系统的可行性分析 2.5.1 管理上的可行性 把教师事务、信息延伸到Internet,建立了评分系统,对于老师来讲,是信息统一化,管理透明化,学生成绩公开化的一个良好的系统,因此,对于学校教务领导来说不会对此有很大的抵触情绪,班主任及辅导员也能够相应的支持。2.5.2 技术上的可行性a、数据涉及的计算比较简单,适合采用数据库;b、学校的微机在存储和运转方面能够满足数据库的需求;c、该系统功能网上有很多文献,可以参考程序功能,帮助实现系统。2.5.3 经济上的可行性学生的成绩繁多增加了老师的负担,造成了管理人的信息费、大量的纸质费用,还用了大量的时间来核对,受一定的时间与物理空间的局限及学生数量,成本较高。而本系统可以帮助老师正确认识评分系统技术在学校中的重要地位,以少量的时间和资金建立评分系统。3 分析和设计31功能分析将学生学管理系统分为:用户管理、学生信息管理、学生成绩管理和学生学籍档案管理四个功能模块,。各个管理模块现用表的方式加以说明如下:学生学籍管理信息系统管理员学生成绩表学生信息表学生学籍管理信息表信息的查、增、删、改学生档案表-1、学生信息管理模块主要对学生信息(学号、姓名、性别、班级、家庭住址)进行管理,本模块又分为三个子模块。学生信息录入学生信息查询学生信息修改删除2、学生成绩管理模块主要是对学生成绩进行管理,四个子模块。学生成绩录入学生成绩查询学生成绩修改/删除学生成绩统计3、学生学籍档案管理模块主要对学校在校生的档案进行管理。学生、奖惩情况的查询学生报名注册登记表录入在校生档案的查询4、用户管理主要对用户权限设置进行管理。用户名:密码设置(管理人员和普通用户)3.2 系统流程图学生学籍管理信息系统数据流程图S01档案单成绩单P03P02P01D3D2D1信息单学生学籍信息管理员学生信息录入成绩信息录入档案信息录入信息数据表成绩数据表档案数据表数据库S01档案单成绩单P03P02P01D3D2D1信息单学生学籍信息管理员学生信息录入成绩信息录入档案信息录入信息数据表成绩数据表档案数据表数据库F05F04F03F02F01按班级按学号按姓名P01D1S01信息录入学生信息管理员学生信息查询信息数据表F06学生学籍管理员通过学生信息单,学生成绩单,学生档案单分别录入,生成信息数据表,成绩数据表,档案数据表从而成立一个总的数据库3.3 主要模块的流程图1、学生信息管理数据流图学籍信息管理员通过信息单录入学生的信息,建立信息数据表。用户可根据,学号,姓名,班级来查询自己所需的信息,方便而简单。2、学生成绩管理数据流图学籍成绩管理人员通过成绩单录入学生的成绩,建立成绩数据表。则用户可根据,学号,姓名,班级查看自己所需的信息。F07F05DP1P2按姓名按班级按学号F04F03F02F06成绩统计成绩单F01S01学籍成绩管理员成绩录入成绩查询成绩数据表3、档案管理数据流图学籍档案管理员通过档案单录入学生的档案,建立档案数据表。用户可根据,学号,姓名,班级查询学生的基本档案F07F06DP2P1按姓名按班级F05F04F03按学号F02档案单F01S01学生档案管理人员档案信息录入档案查询档案数据表4、系统管理据流图系统管理员根据用户需要设置用户及权限,建立系统数据表。使整个系统的维护更具有安全性,保密性F07F05DP1P2验证密码用户名号F04F03F02F06验证登陆F01S01系统管理员建立报表学籍系统系统数据库4.E-R图系统逻辑设计的主要工作就是将ER图转换成一张张的二维表,以及各表的属性。E-R图是系统的概念设计,对系统前期分析相当重要,它可以正确直观的反映出一个业务系统过程。本系统的E-R图如下:班级姓名11N1N111NN用户名密码登录管理员/普通用户学生学籍从属学生信息联系电话学号专业家庭住址出生年月从属学生成绩专业学号课程名称姓名班级从属学生档案专业姓名学号班级政治面貌奖惩是否留级包含注册表专业班级姓名学号出生年月家庭住址联系电话 学生学籍管理信息系统E-R图5.数据字典l 数据项学生表(XS) 名称数据类型大小约束Xh(主键)char10not nullXmchar10not nullXb char10nullCssjchar 10nullZychar10nullZxfchar10nullBzchar10 nullKchchar10 Not null课程表(XS_KC)名称数据类型大小约束Xh(主键)char10Not nullXchchar100nullCjchar10null性别表(XBM)名称数据类型大小约束XbChar10Not nullXbmChar10Not nulll 数据约束(1)实体完整性约束:基本关系的所有主键的属性都不能取空值且主键作为唯一性标识。需要满足该约束的主键:学生表(XS).学号(xh)、课程表(KCB).课程编号(kch).(2)参照完整性约束:外键的值只能取空值或等于关联主键的值。需要满足该约束的外键:学生表(XS).学号与课程表(KCB)课程号外键关联.(3)用户定义完整性约束:针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。需要满足该约束的属性:学生表(XS).学号,课程表(KCB).课程编号,.都不能为空,学生表(XS).性别只能为男或女。l 数据流图学生课程录入查询学生信息课程成绩l 数据存储信息XS表:Xh(主键)、Xb、Xb、Cssj、Zy、Zxf、Bz、Kch(外键)。KC表:Kch(主键)、kCM、Cj。XBM表:Xb、Xbm。6 具体代码实现#include <stdio.h>#include <string.h>#include <conio.h>#include <malloc.h>#include <stdlib.h>#define N 100struct student char XUEHAO20; char XINGMING10; char XINGBIE4; char NIANLING10; char JIGUAN10; char ZHUANYE10; char BANJI6; char XIBIE20;student;void CAIDAN();void ZHUCE();void XIUGAI();void SHANCHU();void del_XUEHAO(FILE *fp);void del_XINGMING(FILE *fp);void CHAZHAO();void sch_XUEHAO(FILE *fp);void sch_XINGMING(FILE *fp);void TONGJI();void XIANSHI();void TIANJIA();void save( struct student student);main() char choose,yes_no; do CAIDAN(); printf("n 请输入序号: (18) "); choose=getch(); system("cls"); switch(choose) case'1': printf(" %c",choose);ZHUCE();break; case'2': printf(" %c",choose);XIUGAI();break; case'3': printf(" %c",choose);SHANCHU();break; case'4': printf(" %c",choose);TIANJIA();break; case'5': printf(" %c",choose);CHAZHAO();break; case'6': printf(" %c",choose);TONGJI();break; case'7': printf(" %c",choose);XIANSHI();break; case'8': break; default:printf("n %c 序号不对!n",choose); if(choose='8')break; printf("n 要继续选择吗 ? (Y/N) n"); do yes_no=getch(); printf(" %c",yes_no);while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n'); while(yes_no='Y'|yes_no='y');void CAIDAN() system("cls"); 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 ");/*定义学生信息注册的函数*/void ZHUCE() int i=1; struct student temp; FILE *fp; fp=fopen("F:/123.txt","w"); if(fp=NULL) printf("n 打开文件失败! n");return; printf("n 请输入第1个学生信息:n"); printf(" 学号(用#结束输入): "); do gets(temp.XUEHAO); while(strcmp(temp.XUEHAO," ")=0); printf(" 姓名(用#结束输入): ");gets(temp.XINGMING); printf(" 性别(用#结束输入): ");gets(temp.XINGBIE); printf(" 年龄(用#结束输入): ");gets(temp.NIANLING); printf(" 籍贯(用#结束输入): ");gets(temp.JIGUAN); printf(" 专业(用#结束输入): ");gets(temp.ZHUANYE); printf(" 班级(用#结束输入): ");gets(temp.BANJI); printf(" 系别(用#结束输入): ");gets(temp.XIBIE); while(temp.XUEHAO0!='#'&&temp.XINGMING0!='#'&&temp.XINGBIE0!='#'&&temp.NIANLING0!='#'&&temp.JIGUAN0!='#'&&temp.ZHUANYE0!='#'&&temp.BANJI0!='#'&&temp.XIBIE0!='#'&&temp.XIBIE) fprintf(fp,"%5s%10s%10s%10s%10s%10s%10s%10sn",temp.XUEHAO,temp.XINGMING,temp.XINGBIE,temp.NIANLING,temp.JIGUAN,temp.ZHUANYE,temp.BANJI,temp.XIBIE,temp); i+; printf("n 请输入第 %d 个学生信息:n ",i); printf(" 学号(用#结束输入): "); do gets(temp.XUEHAO); while(strcmp(temp.XUEHAO," ")=0); printf(" 姓名(用#结束输入): ");gets(temp.XINGMING); printf(" 性别(用#结束输入): ");gets(temp.XINGBIE); printf(" 年龄(用#结束输入): ");gets(temp.NIANLING); printf(" 籍贯(用#结束输入): ");gets(temp.JIGUAN); printf(" 专业(用#结束输入): ");gets(temp.ZHUANYE); printf(" 班级(用#结束输入): ");gets(temp.BANJI); printf(" 系别(用#结束输入): ");gets(temp.XIBIE); student=temp; save(&temp);fclose(fp);/*定义保存函数*/void save( struct student student) FILE *fp=NULL; fp=fopen("F:/123.txt","ab+"); fwrite(student,sizeof(struct student),1,fp); fclose(fp);/*定义查找学生信息的函数*/void CHAZHAO() char c; FILE *fp; fp=fopen("F:/123.txt","r"); if(fp=NULL) printf("n 打开文件失败! n");return; printf("n 按学号查找( 1 ),还是按姓名查找( 2 )? "); c=getch(); putch(c); if(c='1') sch_XUEHAO(fp); else if(c='2') sch_XINGMING(fp); else printf("n 非法字符!n"); fclose(fp);/*定义按学号查找学生信息的函数*/void sch_XUEHAO(FILE *fp) int flag=0,n=0; char tempXUEHAO20; struct student temp; printf("n 请输入要查找学生信息的学号: "); gets(tempXUEHAO); while(feof(fp)=0) fscanf(fp,"%5s%10s%10s%10s%10s%10s%10s%10sn",&temp.XUEHAO,&temp.XINGMING,&temp.XINGBIE,&temp.NIANLING,&temp.JIGUAN,&temp.ZHUANYE,&temp.BANJI,&temp.XIBIE); if(strcmp(tempXUEHAO,temp.XUEHAO)=0) if(flag=0) printf(" 学号 姓名 姓别 年龄 籍贯 专业 班级 系别n"); printf("%5s%10s%10s%10s%10s%10s%10s%10sn",temp.XUEHAO,temp.XINGMING,temp.XINGBIE,temp.NIANLING,temp.JIGUAN,temp.ZHUANYE,temp.BANJI,temp.XIBIE); flag=1; n+; if(n=0) printf("n 文件中无此信息!n"); else if(flag=0) printf("n 文件中无此人!n");/*定义按姓名查找学生信息的函数*/void sch_XINGMING(FILE *fp) int flag=0,n=0; char tempXINGMING10; struct student temp; printf("n 请输入要查找学生信息的姓名: "); gets(tempXINGMING); while(feof(fp)=0) 7课程设计体会通过这次的C语言课程设计,我获益匪浅。首先最深的是课本知识学的再好,也需要实际的检验。我从这次的课程中我认识到了自己的许多不足,满以为自己学的很好,可是到实际运用时,才发现自己这也不行,那里不足。让我深刻认识到自己所学知识必须运用于实际,让实际来检验自己的水平。同时这次课程设计也给了我们一个真正展示自我的机会,我通过自己的努力和老师、朋友的帮助顺利完成了这次课程设计 参考文献1 张福祥. C语言程序设计M. 沈阳:辽宁大学出版社,2010.12 张福祥,王萌C语言程序设计习题解答与实验实训M沈阳:辽宁大学出版社,2010.13 牛莉,刘远军等计算机等级考试辅导教程M北京:中国铁道出版社,2008