语c言课程设计说明书学生信息管理系统大学论文.doc
内蒙古科技大学课程设计说明书内蒙古科技大学本科生课程设计说明书题 目:C语言课程设计 学生管理系统 学生姓名:郭文杰学 号:1567159106专 业:软件工程班 级:软件一班指导教师:康懿日 期: 2016 年 1月 3 日39内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生信息管理系统 指导教师 康懿时间2016.1.52016.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。某班学生基本信息管理,包括以下功能:v 从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里v 具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录)v 具有插入、修改和删除信息的功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社目 录内蒙古科技大学课程设计任务书I第一章 需求分析31.1引言31.2任务概述31.3数据描述31.4功能需求31.5性能需求31.6运行需求41.7任务计划4第二章概要设计52.1总体设计52.2数据类型设计(或数据结构设计)52.3接口设计 /函数声明52.4运行界面设计5第三章详细设计73.1输入模块设计73.2输出模块设计73.3查找模块设计73.4排序模块设计73.5保存及读取模块设计7第四章测试分析84.1测试程序执行情况84.2出现的问题和解决的方法8第五章用户手册(可选)95.1使用说明95.2运行说明9第六章课程设计总结10附录:程序代码11参考文献12致谢13第一章 需求分析1.1 引言随着学生人数的增多,学生信息管理变得越来越困难,为了方便学校对学生信息的管理,一个简易的学生信息管理系统可以解决一些简单的问题1.2 任务概述某班学生基本信息管理,包括以下功能:v 从键盘输入包括学号、姓名、性别、出生年月日、籍贯、所在院系、专业、奖惩信息等,并将其保存在磁盘文件里v 具有进行单项查询或多项查询的功能(即按照给定的关键字姓名等找出满足条件的纪录)v 具有插入、修改和删除信息的功能v 具有输出文件数据信息的功能1.3 数据描述需要输入的数据包括学生的学号、姓名、出生年月日、籍贯、所在院系、专业、奖惩信息系统会自动按学号排序存储信息,出生年月日为整型,其他数据为字符型1.4 功能需求 学生信息管理系统存放了每个学生的学号、姓名、性别、年龄、出生年月日、籍贯、专业、院系、奖罚信息的数据库。每个人的信息定义在一个结构体变量中。其结构如下:系统通过显示程序、添加加程序、查询程序、删除程序、修改程序、排序程序来实现学生信息管理系统的改变颜色功能、显示功能、追加功能、查询功能、删除功能、修改功能、排序功能。各个功能的调用通过主函数中的switch语句来实现。 1.5 性能需求1.6 运行需求1.7 任务计划1.程序可以根据使用者的合法操作实现已罗列的功能2.在执行插入功能时,要输入成绩时再输入完最后一个数据后再输入-1才能实现正常退出3.在输入数字超出范围时,程序会做出提示4.若想退出 查询,删除,修改,筛选 功能时,若想不进行操作退出功能,需要按任意键发返回主菜单/*第二章 概要设计2.1 总体设计学号查找姓名查找修改信息插入信息删除信息输出信息保存文件读取文件排序退出结束注册信息主函数改变颜色2.2 数据类型设计(或数据结构设计)1. 数据以顺序结构储存2. 存在两个结构体typedef struct data int year; int month; int day;DATA;typedef struct studentchar nameM;char sex;DATA birthday;char num20;char jiguan20;char zhuanye20;char yuanxi20;char jianli120;stu;2.3 接口设计 表2.1:函数列表函数名函数格式 /即函数首部函数功能mainint main()主函数YanSeint YanSe (void)颜色菜单Menu int Menu(void)主菜单DataSort void DataSort(stu st,int n);排序ZhuCeint ZhuCe(stu st,int n);注册信息XieRuvoid XieRu(stu st,int n);写入信息到文件DuQuint DuQu(stu st);读取文件信息Peintvoid Print(stu st,int n);输出信息XueHaovoid XueHao(stu st,int n);按学好查找XingMingvoid XingMing(stu st,int n);按姓名查找XiuGaivoid XiuGai(stu st,int n);修改信息ChaRuint ChaRu(stu st,int n);插入信息ShaChuvoid ShaChu(stu st,int n);删除信息2.4 运行界面设计第三章 详细设计3.1 输入模块设计int ZhuCe (stu st) int i=-1; system( "cls" );/清屏 printf("tt*n"); printf("tt* 1.更新成员信息 *n"); printf("tt*n"); do i+; printf("请输入姓名:n"); scanf("%s",&sti.name); if(atoi(sti.name)>=0) printf("请输入性别(w/m):n"); scanf(" %c",&sti.sex); printf("请输入出生年月日:n"); scanf("%d%d%d",&sti.birthday.year,&sti.birthday.month,&sti.birthday.day); printf("请输入学生证号:n"); scanf("%s",&sti.num); printf("请输入个人籍贯:n"); scanf("%s",&sti.jiguan); printf("请输入个人专业:n"); scanf("%s",&sti.zhuanye); printf("请输入所在院系:n"); scanf("%s",&sti.yuanxi); printf("请输入简历:n"); scanf("%s",&sti.jianli); printf("n编号%d数据添加成功!n",i+1); printf("输入姓名为负数结束输入!n"); printf("n"); else break; while(sti.num>0); printf("n-n"); printf("数据更新成功!n"); system("pause"); return i; 3.2 输出模块设计程序通过一个printf函数把输出信息的表头打印出来,再通过一个for循环把每一个学生的信息输出,再输出的时候,通过定义数字、字符的长度大于本身的长度来实现输出信息的排版和隔开,使输出的信息排版美观。void Print(stu st,int n)int i;system( "cls" );printf("n-n");printf("编号姓名t性别t出生年月日t学生证号t籍贯t专业t院系t简历n");for(i=0;i<n;i+)printf("%dt%st%ct%d.%02d.%02dt%16st%st%st%st%sn", i+1,sti.name,sti.sex,sti.birthday.year,sti.birthday.month,sti.birthday.day, sti.num,sti.jiguan,sti.zhuanye,sti.yuanxi,sti.jianli); 3.3 查找模块设计void XueHao(stu st,int n)char x20;int i;system( "cls" );printf("tt*n");printf("tt* 2.学生证号查找 *n");printf("tt*n");printf("输入你要查询的身份证号:");scanf("%s",x);for(i=0;i<n;i+)if(strcmp(sti.num,x)=0)printf("编号t姓名t性别t出生年月日t学生证号t籍贯t专业t院系t简历n");printf("%dt%st%ct%d.%02d.%02dt%16st%st%st%st%sn", i+1,sti.name,sti.sex,sti.birthday.year,sti.birthday.month,sti.birthday.day, sti.num,sti.jiguan,sti.zhuanye,sti.yuanxi,sti.jianli);printf("n-n");system("pause");return;printf("未找到!");printf("n-n");system("pause");void XingMing(stu st,int n)char x10;int i;system( "cls" );printf("tt*n");printf("tt* 3.姓名查找 *n");printf("tt*n");printf("输入你要查询的姓名:");scanf("%s",x);for(i=0;i<n;i+)if(strcmp(sti.name,x)=0)printf("编号t姓名t性别t出生年月日t学生证号t籍贯t专业t院系t简历n");printf("%dt%st%ct%d.%02d.%02dt%16st%st%st%st%sn", i+1,sti.name,sti.sex,sti.birthday.year,sti.birthday.month,sti.birthday.day, sti.num,sti.jiguan,sti.zhuanye,sti.yuanxi,sti.jianli);printf("n-n");system("pause");return;printf("未找到!");printf("n-n");system("pause");3.4 排序模块设计void DataSort(stu st,int n) int i,j; stu temp; for(i = 0;i<n-1;i+) for(j = i+1;j < n;j+) if(strcmp(sti.num,stj.num)>0) temp= sti; sti=stj; stj=temp; 3.5 保存及读取模块设计 void XieRu(stu st,int n) FILE *fp; if(fp=fopen("ren.txt","w")=NULL) printf("保存文件失败!n"); return; fwrite(st,sizeof(stu),n,fp); printf("保存成功!n"); fclose(fp); system("pause"); int DuQu(stu st) FILE *fp; int i; if(fp=fopen("ren.txt","r")=NULL) printf("文件不存在!打开失败!n"); return 0; for(i=0;!feof(fp);i+) fread(&sti,sizeof(stu),1,fp); fclose(fp); printf("读取成功!n"); system("pause"); return i-1; 第四章 测试分析4.1 测试程序执行情况能按照正确操作实现已加入的各个功能,一些部分添加了报错的功能,如选择1-n中的一个数字。4.2 出现的问题和解决的方法无第五章 用户手册(可选)5.1 使用说明按照提示来输入正确的信息后,按enter键来查看结果第六章 课程设计总结 通过几个星期的课程设计,使我对C语言程序设计有了一个更加深入的认识,从刚开始的初略的认识到有了比较深入的认识,能够比较灵活的运用。C语言是一门比较灵活、有趣而且实践性非常强的课程,我们要从它的实践运用中,体会到了学习C语言的乐趣和好处。在课程设计的这段时间里,我学到了许多东西,同时也使我对以前学的东西有了一个更深更透彻的理解。比如:能够灵活的运用双重循环,switch语句,结构体的定义、引用、使用,指针的定义、使用等。虽然对C语言编程还有许多不明白,但这段时间我真的获易匪浅。以前上编程课,我基本上都没有深入理解自己所编的程序,常常就是仿照书本编一个程序,再运行几遍,没错就万事大吉,根本就没管它了。但这次就不同,对每个程序都有一个深入透彻的理解,常常不懂就问同学或老师,直至把它弄懂为止。C语言限制比较的宽松,我们在编程的时候更应该仔细,一个小小的错误都可能导致程序的无法编译。所以对于大的程序,我们更应该先编好主程序,再一个一个模块的编。这样大大的缩短了编程的时间同时又提高了程序的可读性。 通过课程设计,使我对C语言的运用有了更深刻的认识。使我对C语言的实践应用更加期待,更加好奇,我相信C语言对我以后的人生将有很大痹益。在对C语言的使用中,使我对软件的认识也有了初步的了解。更是为我以后学习的微机原理以及单片机原理奠定了基础。我们的专业是电子信息工程,主要是跟电子产品打交道,后面用到C语言的地方还有许多,所以说,学好C语言,为我们以后专业知识的学习有很大好处。在学习C语言中更使我体会到了学习计算机技术的乐趣,我将更加努力多学,学好计算机技术。附录:程序代码#include<stdio.h>#include<stdlib.h>#include<string.h>/字符串操作#define N 30 /人数#define M 10 /名字长度typedef struct data int year; int month; int day;DATA;typedef struct studentchar nameM;char sex;DATA birthday;char num20;char jiguan20;char zhuanye20;char yuanxi20;char jianli120;stu;int ChangeColor(void);/颜色菜单void DataSort(stu st,int n);/排序int menu(void);/用户菜单int read(stu st);/添加人员信息void xieru(stu st,int n);/写入信息到文件int duqu(stu st);/从文件读取信息void print(stu st,int n);/输出信息void shenfenzheng(stu st,int n);/按身份证查找信息void xingming(stu st,int n);/按姓名查找void xiugai(stu st,int n);/修改信息int charu(stu st,int n);/插入信息void shanchu(stu st,int n);/删除信息int main()int a,n,m; stu renN;printf(" 0 = 黑色 8 = 灰色n");printf(" 1 = 蓝色 9 = 淡蓝色n");printf(" 2 = 绿色 10 = 淡绿色n");printf(" 3 = 湖蓝色 11 = 淡浅绿色n");printf(" 4 = 红色 12 = 淡红色n");printf(" 5 = 紫色 13 = 淡紫色n");printf(" 6 = 黄色 14 = 淡黄色n");printf(" 7 = 白色 15 = 亮白色nn");printf("请选择你想要的背景颜色:");m = ChangeColor( ); switch(m)case 0: system("color 0f"); break;case 1: system("color 10"); break;case 2: system("color 0A"); break;case 3: system("color 30"); break;case 4: system("color 40"); break;case 5: system("color 50"); break;case 6: system("color 60"); break;case 7: system("color 70"); break;case 8: system("color 80"); break;case 9: system("color 90"); break;case 10: system("color a0"); break;case 11: system("color b0"); break;case 12: system("color c0"); break;case 13: system("color d0"); break;case 14: system("color e0"); break;case 15: system("color f0"); break; deflault : printf("输入错误!请输入0-15的数字!n"); system("pause"); break;while(1)system( "cls" );/清屏printf("n");printf("n");printf("n");printf("t*人员管理系统*n");printf("t* *n");printf("t* 1.注册人员信息 2.学号查找 3.姓名查找 *n");printf("t* 4.修改信息 5.插入信息 6.删除信息 *n");printf("t* 7.输出信息 8.保存文件 9.读取文件 *n");printf("t* 10.排序 0.退出 *n");printf("t*n");a=menu();switch(a)case 1:n=read(ren);break;case 2:shenfenzheng(ren,n);break;case 3:xingming(ren,n);break;case 4:xiugai(ren,n);break;case 5:n=charu(ren,n);break;case 6:shanchu(ren,n);n-;break;case 7:print(ren,n);printf("n-n");system("pause");break;case 8:xieru(ren,n);break;case 9:n=duqu(ren);break; case 10: DataSort( ren, n); break;case 0:system( "cls" );printf("nnn");printf("t*n");printf("t* *n");printf("t* *n");printf("t* 谢谢使用! *n");printf("t* *n");printf("t* *n");printf("t*n");exit(0); /exit(code)当code为0时正常退出。非0时出现某种错误后退default:printf("输入错误!请输入0-10的数字!n");system("pause");break;return 0;int ChangeColor(void) int a; doscanf("%d",&a);if(!(a>=0&&a<=15)getchar();printf(" 输入错误,请重新输入:");while(!(a>=0&&a<=15); return a;int menu(void)/用户菜单int a;printf("nt输入你的选择(0-10): bb");scanf("%d",&a);return a; void xieru(stu st,int n) FILE *fp; if(fp=fopen("ren.txt","w")=NULL) printf("保存文件失败!n"); return; fwrite(st,sizeof(stu),n,fp); printf("保存成功!n"); fclose(fp); system("pause"); int duqu(stu st) FILE *fp; int i; if(fp=fopen("ren.txt","r")=NULL) printf("文件不存在!打开失败!n"); return 0; for(i=0;!feof(fp);i+) fread(&sti,sizeof(stu),1,fp); fclose(fp); printf("读取成功!n"); system("pause"); return i-1; int read(stu st) int i=-1; system( "cls" ); printf("tt*n"); printf("tt* 1.更新成员信息 *n"); printf("tt*n"); do i+; printf("请输入姓名:n"); scanf("%s",&sti.name); if(atoi(sti.name)>=0) printf("请输入性别(w/m):n"); scanf(" %c",&sti.sex); printf("请输入出生年月日:n"); scanf("%d%d%d",&sti.birthday.year,&sti.birthday.month,&sti.birthday.day); printf("请输入学生证号:n"); scanf("%s",&sti.num); printf("请输入个人籍贯:n"); scanf("%s",&sti.jiguan); printf("请输入个人专业:n"); scanf("%s",&sti.zhuanye); printf("请输入所在院系:n"); scanf("%s",&sti.yuanxi); printf("请输入简历:n"); scanf("%s",&sti.jianli); printf("n编号%d数据添加成功!n",i+1); printf("输入姓名为负数结束输入!n"); printf("n"); else break; while(sti.num>0); printf("n-n"); printf("数据更新成功!n"); system("pause"); return i; void print(stu st,int n)int i;system( "cls" );printf("n-n");printf("编号姓名t性别t出生年月日t学生证号t籍贯t专业t院系t简历n");for(i=0;i<n;i+)printf("%dt%st%ct%d.%02d.%02dt%16st%st%st%st%sn", i+1,sti.name,sti.sex,sti.birthday.year,sti.birthday.month,sti.birthday.day, sti.num,sti.jiguan,sti.zhuanye,sti.yuanxi,sti.jianli); void shenfenzheng(stu st,int n)