资源描述
攀 枝 花 学 院
学生课程设计(论文)
题 目: 学生证管理程序
学生姓名: 高 健 学 号:201210804017
所在院(系): 数学与计算机学院
专 业: 软件工程
班 级: 2012级1班
指导教师: 吕俊瑞 职 称: 助 教
2013年01月 02日
攀枝花学院本科学生课程设计任务书
题 目
学生证管理程序
1、课程设计的目的
是学习结构数组或链表的建立,文件的输入及输出、函数及其指针的使用方法。
2、课程设计的内容和要求(包括原始数据、技术要求、工作要求等)
一、用C实现如下功能:
(1)程序可以按默认文件名或指定文件名将记录读入内存。
(2)程序可以按默认文件名或指定文件名存储记录文件。
(3)可以通过键盘连续输入学生的学生证信息,如果已经从文件中导入记录,新录入的记录应追加在已有记录之后。
(4)给定某位学生的学号,显示某位学生的学生证信息。
(5)给定某位学生的学号,修改该学生的学生证信息。
(6)给定某位学生的学号,删除该学生的学生证信息。
(7)给定某个班级的班号,显示该班所有学生的学生证信息。
(8)提供一些统计各类信息的功能(自行定义统计项目如性别,年龄)。
(9)学生证应该包含的信息请参看自己的学生证。
(10)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
二、撰写课程设计报告或课程设计总结课程设计报告要求:总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。
3、主要参考文献
[1]谭浩强,《C程序设计》,清华大学出版社
[2]刘振安,孙忱,刘燕君,《C程序设计课程设计》,机械工业出版社
[3]汪诗林,《数据结构算法与应用》,机械工业出版社
4、课程设计工作进度计划
课程设计时间为一周,分四个阶段完成:
1. 分析设计阶段。引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。这一阶段前第1天完成。
2. 编码调试阶段:根据设计分析方案编写C语言代码,然后调试该代码,实现课题要求的功能。这一阶段在第2-3天完成。
3. 总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。这一阶段在第4-5天完成。
4. 考核阶段。这一阶段在第5天完成。
指导教师(签字)
日期
年 月 日
教研室意见:
年 月 日
学生(签字):
接受任务时间: 年 月 日
注:任务书由指导教师填写。
课程设计(论文)指导教师成绩评定表
题目名称
学生证管理程序
评分项目
分值
得分
评价内涵
工作
表现
20%
01
学习态度
6
遵守各项纪律,工作刻苦努力,具有良好的科学工作态度。
02
科学实践、调研
7
通过实验、试验、查阅文献、深入生产实践等渠道获取与课程设计有关的材料。
03
课题工作量
7
按期圆满完成规定的任务,工作量饱满。
能力
水平
35%
04
综合运用知识的能力
10
能运用所学知识和技能去发现与解决实际问题,能正确处理实验数据,能对课题进行理论分析,得出有价值的结论。
05
应用文献的能力
5
能独立查阅相关文献和从事其他调研;能提出并较好地论述课题的实施方案;有收集、加工各种信息及获取新知识的能力。
06
设计(实验)能力,方案的设计能力
5
能正确设计实验方案,独立进行装置安装、调试、操作等实验工作,数据正确、可靠;研究思路清晰、完整。
07
计算及计算机应用能力
5
具有较强的数据运算与处理能力;能运用计算机进行资料搜集、加工、处理和辅助设计等。
08
对计算或实验结果的分析能力(综合分析能力、技术经济分析能力)
10
具有较强的数据收集、分析、处理、综合的能力。
成果
质量
45%
09
插图(或图纸)质量、篇幅、设计(论文)规范化程度
5
符合本专业相关规范或规定要求;规范化符合本文件第五条要求。
10
设计说明书(论文)质量
30
综述简练完整,有见解;立论正确,论述充分,结论严谨合理;实验正确,分析处理科学。
11
创新
10
对前人工作有改进或突破,或有独特见解。
成绩
指导教师评语
指导教师签名: 年 月 日
摘要
随着科学技术的飞速发展,经济知识和信息产业初见端倪,特别是信息技术和网络技术的迅速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻。C语言作为国际上广泛流行的通用程序语言,在计算机的研究和应用中以展现强大的生命力。C语言是一种功能强大,使用灵活的计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言特点,它既可用于编写系统软件又可用于编写应用软件。它是由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,c语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到c语言,在操作系统和系统使用系统程序以及需要对硬件进行操作的场合,用c语言明显优于其他高级语言,许多大型应用软件都是用c语言编写的。C语言绘图能力很强,具有可移植性,并具有很强的数据处理能力,因此适用于编写系统软件,三维,二维图形和动画。它是数值计算的高级设计。
本次课程设计利用c语言编写一个学生证管理程序。实现建立学生数据结构体、使用多个函数。对学生证上的信息进行管理,如浏览学生信息、查询学生信息,修改学生信息,删除学生信息,统计男女生人数等功能。
关键词:c程序设计、结构体、学生信息
目 录
摘要
1 需求分析·······················································1
1.1 需求概述···················································1
1.2 需求环境···················································1
1.3 功能描述···················································1
2 概要设计·······················································1
2.1 程序功能模块···············································1
2.2 程序流程图·················································2
2.3 数据结构的设计·············································3
3 详细设计·······················································4
3.1 程序初始化·················································4
3.1.1 代码功能···········································4
3.1.2 功能实现代码·······································4
3.2 程序的操作过程·············································4
3.2.1 录入函数···········································4
3.2.2 浏览函数···········································5
3.2.3 增加函数···········································5
3.2.4 查询某学生信息函数·································6
3.2.5 查询某班的学生信息函数·····························7
3.2.6 修改函数···········································8
3.2.7 删除函数···········································9
3.2.8 统计函数··········································10
3.2.9 菜单函数··········································10
4 测试与运行····················································11
结束语··························································16
参考文献························································16
附录····························································17
1. 需求分析
1.1 需求概述
根据题目要求,由于学生信息是一个有不同类型的变量组成,因此,应提供结构体操作,在程序中需要浏览学生信息,应提供显示、查找、修改、删除、统计等操作。另外还应该提供键盘式的选择菜单实现功能选择。
1.2 需求环境
本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:
1.硬件要求:一台计算机。
2.软件配置:WINDOWS 7 + Visual C++6.0
1.3 功能描述
使用学生证管理程序程序对学生证上的学生信息进行存储、浏览、添加、搜索、修改、删除以及统计男女生的人数等操作。
2.概要设计
2.1 程序功能模块
该程序在c语言知识的基础上,在Visual C++环境下进行学生证管理的 全过程,编写了9个子函数,其基本的功能描述如下:
1. 运行程序,首先会出现一个菜单,有0~8的数字选择项;
2. 选择1,录入全部学生信息;
3. 选择2,浏览全部学生信息;
4. 选择3,增加某位学生信息;
5. 选择4,查询某位学生信息;
6. 选择5,查询该班所以学生证信息;
7. 选择6,修改某位学生的学生证信息;
8. 选择7,删除某位学生的学生证信息;
9. 选择8,分别统计男女生的人数;
10. 选择0,退出程序。
24
2.2 程序框图
图 2.2.1
choice=0
结束
返回菜单
统计人数
删除信息
修改信息
按班号查询信息
录入信息
浏览信息
增加学生信息
按学号查询信息
choice=8
choice=7
choice=6
choice=5
choice=4
choice=3
choice=2
choice=1
菜单
开始
2.3数据结构的设计
1. 用一个结构体typedef struct Student{char Class[30];char number
[100];char name[100];char sex[10];int birthday;int ruxue; }str;分别来定义一个学生的所在班级、学号、姓名、性别、出生日期和入学时间。
2.用一个main函数作为主菜单,运用switch选择结构,形成8个选择项。
3.定义七个函数int input(str s[],int n); void scan(str
s[],int n); int add(str s[],int n);void searchstudent(str s[],int n);void searchclass(str s[],int n); void amend(str s[],int n);int Delete(str s[],int n);void statistics(str s[],int n)。分别表示输入学生信息,浏览所有学生信息、
添加学生的信息、查找某位学生信息、查找某班的所有的学生的学生证信息、修改某学生的信息、删除某学生信息、统计男女生的人数。
4.根据main函数中设定的选择分支,进行不同的选择,从而调用不同的子函数。
5.每进行一项工作后,按Enter键即可返回到主菜单,再进行下一个选择。
6.如果按0键,就说明选项不在这个选择结构的范围内,那么它将直接跳出,这样整个过程就直接结束了。
3. 详细设计
3.1 程序初始化
3.1.1 代码功能
实现菜单中选项的功能
3.1.2 功能实现代码
各函数实现菜单中选项的功能
3.2 程序的操作过程
3.2.1 录入函数
选择choice的值为1,输入需要存储的学生信息的个数,然后输入学生的班级、学号、姓名、生日、入学日期,将信息存储在结构体str中,录入成功后,按enter 键返回menu函数。返回主函数后,执行其他的函数操作。
[程序]
int input(str s[],int n) /*输入学生信息*/
{
int i,a;
system("cls");
printf("请输入学生信息个数:");
scanf("%d",&a);
printf("\n");
n=a;
for(i=0;i<a;i++)
{
printf("请输入学生所在班级:");
scanf("%s",&s[i].class_number);
printf("请输入学生的学号:");
scanf("%s",&s[i].number);
printf("请输入学生的名字:");
scanf("%s",&s[i].name);
printf("请输入学生的性别(man or woman):");
scanf("%s",&s[i].sex);
printf("请输入学生生日:");
scanf("%d",&s[i].birthday);
printf("请输入学生入学日期:");
scanf("%d",&s[i].ruxueriqi);
printf("\n");
if((strcmp(s[i].sex,"man")!=0)&& /*判断是否符合要求*/
(strcmp(s[i].sex,"woman")!=0))
{
i=i-1;
printf("此次输入错误请重新输入\n");
}
}
printf("录入信息成功!\n");
getch(); /*保存在结构体中*/
return n;
}
3.2.2 浏览函数
选择choice的值为2,显示全部已录入的学生信息。浏览完后,按enter键,返回menu函数,执行其他的函数操作。
[程序]
void scan(str s[],int n) /*浏览所有学生信息*/
{
int i;
system("cls");
printf("\nclass_number\tnumber\tname\tsex\tbirthday\truxueriqi\n");
for (i=0;i<n;i++)
{
printf("\n\t%s\t%s\t%s\t%s\t%d\t\t%d\n",
s[i].class_number,s[i].number,s[i].name,s[i].sex,s[i].birth day,s[i].ruxueriqi); /*依次输出已保存的信息*/
}
getch();
}
3.2.3 增加函数
选择choice的值为3,输入需要增加的学生信息的个数,然后输入学生的班级、学号、姓名、生日、入学日期,将信息也存储在结构体str中,添加成功后,按enter 键返回menu函数。返回主函数后,执行其他的函数操作。
[程序]
int add(str s[],int n) /*添加某位学生的学生证信息*/
{
int i,a;
system("cls");
printf("How many students do you want to add?:");
scanf("%d" ,&a); /*输入需增加的个数*/
printf("\n");
for(i=n;i<a+n;i++)
{
printf("请输入学生所在班级:");
scanf("%s",&s[i].class_number);
printf("请输入学生的学号:");
scanf("%s",&s[i].number);
printf("请输入学生的名字:");
scanf("%s",&s[i].name);
printf("请输入学生的性别(man or woman):");
scanf("%s",&s[i].sex);
printf("请输入学生生日:");
scanf("%d",&s[i].birthday);
printf("请输入学生的入学日期:");
scanf("%d",&s[i].ruxueriqi);
printf("\n");
}
n=n+a;
printf("添加成功!\n");
getch(); /*保存在结构体中*/
return n;
}
3.2.4 查询某学生信息函数
查询的主要方式就是通过学号查询,查询时需要通过输入学号并按学生信息储存逐个核对,如果出现发现相同信息则输出该同学的信息,没有发现相同的信息则提示未找到并重现输入。该查询也是通过机构体str的元素项的比较得出。查询成功后,按enter键返回menu函数,继续选择并进行其他函数的操作。
[程序]
void searchstudent(str s[],int n) /*查询某位学生学生证信息*/
{
int i;
char a[10];
system("cls");
printf("请输入该生的学号:");
scanf("%s",a);
printf("\nclass_number\tnumber\tname\tsex\tbirthday\truxueriqi\n");
for(i=0;i<n;i++)
{
if(strcmp(s[i].number,a)==0) /*用if语句判断是否存在该生*/
{
printf("\n\t%s\t%s\t%s\t%s\t%d\t\t%d\n",
s[i].class_number,s[i].number,s[i].name,s[i].sex,s[i].birthday,s[i].ruxueriqi);
}
}
getch();
}
3.2.5 查询某班的学生信息函数
查询的主要方式就是通过班号查询,查询时需要通过输入班号并按学生信息储存逐个核对,如果出现发现相同信息则输出该班学生的信息,没有发现相同的信息则提示未找到并重现输入。该查询也是通过机构体str的元素项的比较得出。查询成功后,按enter键返回menu函数,继续选择并进行其他函数的操作。
[程序]
void searchclass(str s[],int n) /*查询某班所有学生的学生证信息*/
{
int i;
char a[10];
system("cls");
printf("请输入所在班级:");
scanf("%s",&a);
printf("\nclass_number\tnumber\tname\tsex\t
birthday\truxueriqi\n");
for(i=0;i<n;i++)
{
if(strcmp(s[i].class_number,a)==0) /*用if语句判断是否存在该班*/
{
printf("\n%s\t%s\t%s\t%s\t%d\t%d\n",
s[i].class_number,s[i].number,s[i].name,s[i].sex,
s[i].birthday,s[i].ruxueriqi);
}
}
getch();
}
3.2.6 修改函数
修改一个学生的信息首先要利用学生证号在已经存储的信息中找到该学生的信息并输出该学生的具体信息,再在阅读完信息之后选择所需要修改的信息。修改成功之后需要将已经更改的信息输出到屏幕和结构体str保存。成功之后返回到menu()函数继续选择并执行其他操作。
[程序]
void amend(str s[],int n) /*修改某学生的学生证信息*/
{
int i;
char a[10];
char b;
system("cls");
printf("请输入你想修改的学生的学号:");
scanf("%s",a);
for(i=0;i<n;i++)
{
if(strcmp(s[i].number,a)==0) /*用if语句判断是否存在该学生*/
{
printf("\nAre you sure?(Y/N):\n");
b=getch();
if(b=='y'||b=='Y')
{
printf("请重新输入学生所在班级:");
scanf("%s",&s[i].class_number);
printf("请重新输入学生的学号:");
scanf("%s",&s[i].number);
printf("请重新输入学生的名字:");
scanf("%s",&s[i].name);
printf("请重新输入学生的性别(man or woman):");
scanf("%s",&s[i].sex);
printf("请重新输入学生生日:");
scanf("%d",&s[i].birthday);
printf("请重新输入学生的入学日期:");
scanf("%d",&s[i].ruxueriqi);
printf("修改成功\n");
}
}
}
getch();
}
3.2.7 删除函数
删除一个给定学号的学生的信息时需要在学号输入后在已经有的学生信息中逐个查找,发现该信息后直接将后一个结构体元素复制个被删除的元素,依次类推,直到倒数第二个元素被复制,这时将结构体的有效元素个数减1便完成该学生信息的删除。在删除成功后需要将被改变的学生信息输出屏幕。成功之后释放结构体空间,返回到menu()函数继续选择并执行其他操作。
[程序]
int Delete(str s[],int n) /*删除某学生的学生证信息*/
{
int i,j,k;
char a,del[10];
system("cls");
printf("输入你想删除的学生学号:");
scanf("%s",del);
k=n;
for(i=0;i<n;i++) /*在for语句中循环进行*/
{
if(strcmp(s[i].number,del)==0) /*用if语句判断*/
{
printf("\nclass_number\tnumber\tname\tsex\t
birthday\truxueriqi\n");
printf("\n%s\t%s\t%s\t%s\t%d\t%d\n",
s[i].class_number,s[i].number,s[i].name,s[i].sex,
s[i].birthday,s[i].ruxueriqi);
printf("\n是否确认删除该生(Y or N)\n");
a=getch();
if(a == 'Y' || a=='y')
{
for (j=i+1;j<n;j++)
{
s[j-1]=s[j];
}
n=n-1;
printf("\n删除成功\n");
}
}
}
getch();
return n;
}
3.2.8 统计函数
统计的主要统计男女个数,并通过可输入菜单完成统计项目的选择和相应功能的执行。在统计时是将输入的信息和结构体中的已有信息进行比较,如果出现同样的信息便输出该同学的信息并进行记数统计。完成后释放结构体指针空间,返回到menu()函数继续选择并执行其他操作。
[程序]
void statistics(str s[],int n) /*统计男女生的人数*/
{
int a=0,b=0,i;
for(i=0;i<n;i++) /*for语句循环判断*/
{
if(strcmp(s[i].sex,"man")==0)
a++;
if(strcmp(s[i].sex,"woman")==0)
b++;
}
system("cls");
printf("男生有:%d个,女生有:%d个\n",a,b);
getch();
}
3.2.9 菜单函数
通过choice的取值,对menu 函数中的子函数进行选择,进而进入子函数的函数操作。
[程序]
void menu() /*搜索菜单*/
{
printf("\n*************学生证信息菜单***********************");
printf("\n*1.........录入全部学生证的信息..................*");
printf("\n*2.........搜索全部学生证的信息..................*");
printf("\n*3.........添加某位学生证的信息..................*");
printf("\n*4.........搜索某位学生证的信息..................*");
printf("\n*5.........搜索该班所有学生证信息................*");
printf("\n*6.........修改某位学生的学生证信息..............*");
printf("\n*7.........删除某位学生的学生证信息..............*");
printf("\n*8.........分别统计男生女生的人数................*");
printf("\n*0.........退出..................................*");
printf("\n**************************************************");
printf("\n\n请选择(0--8): ");
}
4. 测试与运行
进入菜单
图4.1
输入学生信息
图4.2
查看学生信息
图4.3
添加某位学生信息
图4.4
查询某位学生信息
图4.5
查看某班学生全部信息
图4.6
修改某位学生信息
图4.7
查看全部的学生信息
图4.8
删除某位学生信息
图4.9
统计男女生的人数
图4.10
5.结束语
在这次课程设计中,我基本上完成了任务,通过的演示过程,运用结构体以及函数,基本上达到了此次课程设计的要求。但是它的不足也是显而易见的,实验过程中有许多的函数思想没有透彻的运用,运行结果也是有许多的漏洞,所以这是值得改进的地方,整个程序的功能有待进一步完善,让更多的方法能得以实现。
虽然在这次的课程设计中有很多的不足,但是我也有很多的收获。通过一周的学习,上机编程,习题难度也是平时没遇见的,上网查找资料,发现了许多平时都没有认真学习而很重要的知识,函数思想以及结构体的使用,也有很多的知识是课堂是没有接触的。在实验过程中,图形的绘画是比较让我头疼的一个问题,但在同学和老师帮助下和查阅了许多的书籍,渐渐的对图形绘画有了感觉,并且有了一定的进步而且让我对图形学的知识有了更好的运用,拓展了对图形学的知识了解的视野,让我的理论知识和算法有了更多的实践。作为一个大的项目,我更体会到了团队合作精神的重要性,虽然我的设计是一个人一组的,但我深刻地认识到只有大家一起努力地学习并研究相关的知识,才能提高做事的效率,也才能更好更快地完成任务。所以这将在我以后的学习和生活中有很在的引导作用。在以后的学习中,我也将加倍地学习图形学的有关知识,以同样的方法学习其他的知识,不断地丰富自己,充实自己,提高自己的能力。
参考文献
[1].谭浩强,《C程序设计》,清华大学出版社
[2].刘振安,孙忱,刘燕君,《C程序设计课程设计》,机械工业出版社
[3].汪诗林,《数据结构算法与应用》,机械工业出版社
[4].Ivor Horton,《C语言入门经典》
[5].张冬梅《C语言程序设计与实习指导》,中国铁道出版社
附录
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#define N 40
typedef struct /*学生证管理系统*/
{
char class_number[30]; /*班级*/
char number[100]; /*学号*/
char name[100]; /*姓名*/
char sex[10]; /*性别*/
int birthday; /*生日*/
int ruxueriqi;
展开阅读全文