c语言课程设计报告(军训管理系统)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西安郵電大學
C语言课程设计报告书
学院名称计算机学院
学生姓名
专业名称
班级
学号
指导教师
2013年06月03日至
时间
2013年06月12日
实验题目:学生军训信息管理系统
一、实验目的
通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固《C 语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。

通过这次实习练习,可以更进一步的熟悉所学的知识,还可以加强和巩固知识。

长达两周的上机练习,为我们提供了很好的编程环境。

更好的了解编程的意义,为将来参加实践活动以及以后的毕业设计打下坚实的基础。

二、实验内容
我设计的是“学生军训信息管理系统”,主要是针对军训学生信息的管理,适用对象主要是学校进行军训的学生,以方便学校对军训学生的管理。

包括学生的姓名、学号、专业、班级、所分入的营号和连号等。

在编写过程中主要运用C语言的基本知识有:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的调用与使用)等。

三、需求分析
该程序是由C语言编写的一个军训学生信息查询软件,本程序在Microsoft Visual C++ 6.0下运行,其主要功能是实现对学生信息的录入、浏览、查询、修改、删除、添加。

其中浏览可以分别以学号、班级、所分入营号为关键字升序浏览学生信息。

四、概要设计
1、方案设计
2、数据结构说明
程序中数据主要是学生信息,具体属于类型如下:
struct student_type
int num; /*学生学号*/
char name[20]; /*学生姓名*/
char major[15]; /*专业*/
int cla; /*班级*/
int ying; /*所分入营号*/
int lian; /*所分入连号*/
3、模块功能说明
第一录入模块:调用input(),对军训学生信息进行录入以及保存。

第二浏览模块:调用scan(),浏览军训学生信息(可按录入、学号、班级、营号方式查看)。

第三查询模块:调用find(),按学号、姓名、班级、营号查询军训学生信息。

第四修改模块:调用change(),对某一学生信息进行修改操作。

第五删除模块:调用del(),对某一学生信息进行删除操作。

第六添加模块:调用add(),添加学生信息。

五、详细设计及运行结果
1.函数之间调用关系图
2.部分模块流程图及运行结果图示
登陆界面
主函数流程图
主页界面(管理员界面
)
录入模块
录入界面
浏览模块(排序)
查找模块
修改模块
六、调试情况,设计技巧及体会
1、测试数据
对功能1(密码设置)的测试:选择方式一,不需密码直接进入学生查看界面;选择方式二,输入一组错误账号密码系统显示“密码有误!请重新输入密码!”,三次错误后将退出系统。

在输入正确密码后,系统显示“登陆成功”并进入主界面。

对功能2(录入学生信息)的测试:按照先后顺序分别输入学生信息:
学号姓名专业班级营号连号
88 huan wl 5 3 2
23 yeye sm 2 5 1
2 huaw tg
3 2 3
45 lvwu wl 5 5 2
对功能3(浏览学生信息)的测试:按照录入顺序分别输出学生信息:
学号姓名专业班级营号连号
88 huan wl 5 3 2
23 yeye sm 2 5 1
2 huaw tg
3 2 3
45 lvwu wl 5 5 2
同时屏幕显示“以上排序由录入数据的先后决定。

也可选择以下为关键词升序查看:1.学号 2.班级 3.所编入营号 0.返回主界面
选择1按照学号由小到大输出学生信息
选择2按照班级由小到大输出学生信息
选择3按照营号由小到大输出学生信息
选择0返回主界面
对功能4(查询学生信息)的测试:查询5营的信息,系统显示为:
学号姓名专业班级营号连号
23 yeye sm 2 5 1
45 lvwu wl 5 5 2
对功能5(修改学生信息)的测试:输入要修改学生的学号11:,系统显示“对不起!您所查找的人不存在”。

输入修改学生学号:88,系统显示出该学生信息。

选择修改学号为:13,系统显“已成功保存!”。

对功能6(删除学生信息)的测试:输入要删除学生的学号:12,系统显示“删除失败!您所查找的人信息不存在!”。

输入要删除的学生的学号:23,系统显示“删除成功!已成功保存!”。

对功能7(添加学生信息)的测试:按照先后顺序分别输入学生信息:
学号姓名专业班级营号连号
16 nana rj 4 1 12
30 nini aq 1 4 2
对功能8(退出系统)的测试:选择退出系统,程序关闭。

2、对调试中主要问题进行总结
调试过程中,经常会出现输入或显示为乱码的情况,这往往是上下定义的数据类型不同或定义数组长度不够所造成的。

有时候程序中还会出现录入五个数据而只显示四个的情况,这也往往是由于定义的结构体数组长度过低所造成的。

像这类问题只要把数据类型都定义成字符型,并且定义一个合理的数组长度往往都能解决。

在调试过程中我遇到最大的问题出现在删除模块。

在运用“rt+”打开文件并对某一数据进行删除后,往往显示会多显示一行数据。

这是由于“rt+”写数据时只会覆盖数据而不会清除原文件数据,因此文件最后一行数据总会保留在原文件中。

后来我先用“rt”打开文件并读取文件中的数据,然后再用“wt”打开原文件将删除后的数据重新写入文件,最终检测运行成功。

3、对自己设计进行评价,指出合理和不足之处,提出改进的方案
本程序拥有很多的优点:第一,它具有作为一个宿舍管理系统的各个功能,包括录入信息、添加信息、修改信息、删除信息、查询信息、统计信息六大主要功能。

可以方便的进行住宿学生信息的管理。

第二,它的各个功能模块在实现时非常方便,例如:录入和添加学生信息可以自己控制录入和添加的人数;统计学生信息可以分学号、班级、专业等进行统计等等。

第三,它也具有安全性,在进入学生信息管理系统之前要求输入账号和密码,所以非常安全,不会造成信息的外泄。

当然程序也有他的不足之处,比如密码不能回显“*”,这样很容易造成密码的丢失。

可以在密码模块中改为回显“*”形式,并且可以对密码进行算法加密,这样更能确保信息的安全。

4、在设计过程中的感受
“万事开头难”这句话在我编写程序的过程中得到了真正的体现。

在最初编写的几天里出现了这样那样的错误一大堆,这主要是由于我对基础知识掌握不扎实所造成的。

但是随后几天里,我对课本知识进行了回顾并不时的向老师和同学进行请教,慢慢的对编写程序也开始得心应手起来。

程序的编写总归是一件费时费力的事情,但只要我们认真编写和调试最后总能成功。

短短的两周实习时间我收获颇多,我相信经过这次实习必将为我以后的深入学习打下扎实的基础。

七、源程序清单
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<io.h>
#define N sizeof(struct st_type)
void input();
void save(struct st_type *head);
struct st_type *openf();
void find();
void change();
void del();
void add();
void scan();
struct student_type
{
int num; /*学生学号*/
char name[20]; /*学生姓名*/
char major[15]; /*专业*/
int cla; /*班级*/
int ying; /*所分入营号*/
int lian; /*所分入连号*/
};
struct st_type
{
struct student_type massage;
struct st_type *next;
};
void main(void)
{
int choice,i,n;
char s[10];
printf("\n\n\n\n\n\n\t\t\t *学生军训信息管理系统*\n");
printf("\n\n\n\n\n欢迎进入学生军训信息管理系统!\n\n");
printf("\t 请选择进入方式:\n\n");
printf("\t\t\t 1.普通用户登入\n");
printf("\t\t\t 2.管理员登入\n");
printf("\n");
printf("\t\t\t\t\t\t\t ●●\n");
printf("\t\t\t\t\t\t\t /█\\/█\\ \n");
printf("\t\t\t\t\t\t\t▅▆▇█████▇▆▅▃\n");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("登入成功!\n");
printf("按任意键进入系统。

\n");
getch();
do
{
system("cls");
printf("\n\n *****军训信息管理系统*****\n\n");
printf(" 1.浏览学生信息\n");
printf(" 2.查询学生信息\n");
printf(" 0.退出系统\n\n");
printf("请选择...\n");
scanf("%d",&choice);
switch(choice)
{
case 1: scan();
break;
case 2: find();
break;
case 0: exit(0);
}
if(choice>5)
printf("没有此项选项!\n");
}while(1);
break;
case 2: printf("请输入密码(三次错误后将关闭程序):\n");
for(i=1;i<4;i++)
{
for(n=0;n<6;n++)
{
s[n]=getch();
printf("*");
}
s[6] = '\0';
if(strcmp(s,"123456") == 0)
{
printf("\n登入成功!\n");
printf("按任意键进入系统。

\n");
getch();
do
{
system("cls");
printf("\n\n *****军训信息管理系统*****\n\n");
printf("\n 1.录入学生信息\n");
printf(" 2.浏览学生信息\n");
printf(" 3.查询学生信息\n");
printf(" 4.修改学生信息\n");
printf(" 5.删除学生信息\n");
printf(" 6.添加学生信息\n");
printf(" 0.退出系统\n\n");
printf("请选择...\n");
scanf("%d",&choice);
switch(choice)
{
case 1: input();
break;
case 2: scan();
break;
case 3: find();
break;
case 4: change();break;
case 5: del();break;
case 6: add();break;
case 0: exit(0);
}
if(choice>5)
printf("没有此项选项!\n");
}while(1);
exit(0);
}
else printf("\n密码错误!\n请重新输入密码!\n");
}
}
}
void input() /*录入信息模块*/
{
char a;
struct st_type *head,*p1,*p2;
system("cls");
head=p2=(struct st_type *)malloc(N);
p1=(struct st_type *)malloc(N);
printf("请输入学生学号:\n");
scanf("%d",&p1->massage.num);
printf("请输入学生姓名:\n");
scanf("%s",p1->);
printf("请输入学生专业:\n");
scanf("%s",p1->massage.major);
printf("请输入学生班级:\n");
scanf("%d",&p1->massage.cla);
printf("请输入学生所分入营号:\n");
scanf("%d",&p1->massage.ying);
printf("请输入学生所分入连号:\n");
scanf("%d",&p1->massage.lian);
while(p1->massage.num!=0)
{
p2->next=p1;
p2=p1;
p1=(struct st_type *)malloc(N);
printf("\n是否继续输入?(是选y,否选n)\n");
fflush(stdin);
scanf("%c",&a);
if(a=='n')
break;
system("cls");
printf("请输入学生学号:\n");
scanf("%d",&p1->massage.num);
printf("请输入学生姓名:\n");
scanf("%s",p1->);
printf("请输入学生专业:\n");
scanf("%s",p1->massage.major);
printf("请输入学生班级:\n");
scanf("%d",&p1->massage.cla);
printf("请输入学生所分入营号:\n");
scanf("%d",&p1->massage.ying);
printf("请输入学生所分入连号:\n");
scanf("%d",&p1->massage.lian);
}
p2->next=NULL;
free(p1);
save(head);
}
void save(struct st_type *head) /*保存信息*/ {
struct st_type *p;
FILE *fp;
fp=fopen("1.txt","wt");
if(fp==NULL)
{
printf("不能打开文件,存储失败!\n");
printf("输入任意键返回主界面。

\n");
getch();
}
p=head->next;
while(p!=NULL)
{
fwrite(p,sizeof(struct student_type),1,fp);
p=p->next;
}
fclose(fp);
printf("已成功保存!\n\n");
printf("输入任意键返回主界面。

\n");
getch();
}
struct st_type *openf() /*打开文件*/
{
FILE *fp;
struct st_type *p,*p1,*head;
head=p1=(struct st_type *)malloc(N);
p=(struct st_type *)malloc(N);
fp=fopen("1.txt","rt");
while((fread(p,sizeof(struct student_type),1,fp))) {
p1->next=p;
p1=p;
p=(struct st_type *)malloc(N);
}
p1->next=NULL;
free(p);
fclose(fp);
return head;
}
void scan() /*浏览信息模块*/
{
int choice;
struct st_type *p, *q, t, *r,*head;
system("cls");
head=openf();
p=head->next;
printf(" 学生学号姓名专业班级分入营号连号\n\n");
while(p!=NULL)
{
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
p=p->next;
}
printf("以上排序由录入数据的先后决定。

\n也可以选择以下为关键词升序查看:\n");
printf(" 1.学号\n");
printf(" 2.班级\n");
printf(" 3.所编入营号\n");
printf(" 0.返回主界面\n\n");
printf("请选择...\n");
scanf("%d",&choice);
if(choice>3)
{
printf("没有此项选项!\n");
printf("请重新选择...\n");
scanf("%d",&choice);
}
if(choice==0)
return;
switch(choice)
{
case 1: for(p = head->next; p; p = p->next)
for(q = p->next; q; q = q->next)
if(p->massage.num > q->massage.num)
{
t = *p;
*p = *q;
*q = t;
r = p->next;
p->next = q->next;
q->next = r;
}
p = head->next;
break;
case 2: for(p = head->next; p; p = p->next)
for(q = p->next; q; q = q->next)
if(p->massage.cla > q->massage.cla)
{
t = *p;
*p = *q;
*q = t;
r = p->next;
p->next = q->next;
q->next = r;
}
p = head->next;
break;
case 3: for(p = head->next; p; p = p->next)
for(q = p->next; q; q = q->next)
if(p->massage.ying> q->massage.ying)
{
t = *p;
*p = *q;
*q = t;
r = p->next;
p->next = q->next;
q->next = r;
}
p = head->next;
break;
}
printf(" 学生学号姓名专业班级分入营号连号\n\n");
while(p!=NULL)
{
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
p=p->next;
}
printf("\n\n输入任意键返回主界面。

\n");
getch();
}
void find() /*查询信息模块*/
{
int n,choice,i=0;
char name[20];
struct st_type *p,*head;
system("cls");
head=openf();
p=head->next;
printf("您可以选择以下为关键词进行查找:\n");
printf(" 1.学号\n");
printf(" 2.姓名\n");
printf(" 3.班级\n");
printf(" 4.所编入营号\n");
printf(" 0.返回主界面\n\n");
printf("请选择...\n");
scanf("%d",&choice);
if(choice>4)
{
printf("没有此项选项!\n");
printf("请重新选择...\n");
scanf("%d",&choice);
}
if(choice==0)
return;
switch(choice)
{
case 1:printf("请输入要查找的学生学号:");
scanf("%d",&n);
printf("\n");
while(p!=NULL)
{
if(p->massage.num==n)
{
i++;
if(i==1)
printf(" 学生学号姓名专业班级分入营号连号\n\n");
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
}
p=p->next;
}
if(i==0)
{
printf("对不起!您所查找的人不存在!\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
break;
case 2: printf("请输入要查找的学生姓名:");
scanf("%s",name);
printf("\n");
while(p!=NULL)
{
if(strcmp(p->,name)==0)
{
i++;
if(i==1)
printf(" 学生学号姓名专业班级分入营号连号\n\n");
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
}
p=p->next;
}
if(i==0)
{
printf("对不起!您所查找的人不存在!\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
break;
case 3:printf("请输入要查找的班级:");
scanf("%d",&n);
printf("\n");
while(p!=NULL)
{
if(p->massage.cla==n)
{
i++;
if(i==1)
printf(" 学生学号姓名专业班级分入营号连号\n\n");
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
}
p=p->next;
}
if(i==0)
{
printf("对不起!您所查找的班级不存在!\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
break;
case 4: printf("请输入要查找的营号:");
scanf("%d",&n);
printf("\n");
while(p!=NULL)
{
if(p->massage.ying==n)
{
i++;
if(i==1)
printf(" 学生学号姓名专业班级分入营号连号\n\n");
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
}
p=p->next;
}
if(i==0)
{
printf("对不起!您所查找的营不存在!\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
break;
}
printf("\n输入任意键返回主界面。

\n");
getch();
}
void change() /*修改信息模块*/
{
int choice,num;
struct st_type *p,*head;
system("cls");
head=openf();
p=head->next;
printf("请输入要修改的学生学号:\n");
scanf("%d",&num);
printf("\n");
while(p!=NULL)
{
if(p->massage.num==num)
{
printf(" 学生学号姓名专业班级分入营号连号\n\n");
printf(" %d %s %s %d %d
%d\n",p->massage.num,p->,p->massage.major,p->mas sage.cla,p->massage.ying,p->massage.lian);
break;
}
p=p->next;
}
if(p==NULL)
{
printf("对不起!您所查找的人不存在!\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
printf("\n请输入选择需要修改的地方:\n");
printf(" 1.学号\n");
printf(" 2.姓名\n");
printf(" 3.专业\n");
printf(" 4.班级\n");
printf(" 5.所编入营号\n");
printf(" 6.所编入连号\n");
scanf("%d",&choice);
switch(choice)
{
case 1: printf("请输入修改的值:");
scanf("%d",&p->massage.num);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
case 2: printf("请输入修改的值:");
scanf("%s",p->);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
case 3: printf("请输入修改的值:");
scanf("%s",p->massage.major);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m
assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
case 4: printf("请输入修改的值:");
scanf("%d",&p->massage.cla);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
case 5: printf("请输入修改的值:");
scanf("%d",&p->massage.ying);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
case 6: printf("请输入修改的值:");
scanf("%d",&p->massage.lian);
printf("修改成功!修改后信息为:\n");
printf(" %d %s %s %d %d
%d\n\n",p->massage.num,p->,p->massage.major,p->m assage.cla,p->massage.ying,p->massage.lian);
save(head);
break;
}
}
void del() /*删除信息模块*/
{
int num;
struct st_type *p,*head,*p0;
system("cls");
head=openf();
p0=head;
p=p0->next;
if(p==NULL)
{
printf("无信息可删除\n");
printf("\n输入任意键返回主界面。

\n");
getch();
return;
}
printf("请输入要删除的学生学号:\n");
scanf("%d",&num);
while(p!=NULL)
{
if(p->massage.num==num)
{
p0->next=p->next;
free(p);
printf("删除成功!\n");
save(head);
return;
}
p0=p;
p=p->next;
}
printf("删除失败!您所查找人信息不存在。

\n");
printf("\n输入任意键返回主界面。

\n");
getch();
}
void add() /*添加信息模块*/
{
FILE *fp;
char a;
struct st_type *p,*p1,*head;
system("cls");
head=p1=(struct st_type *)malloc(N);
p=(struct st_type *)malloc(N);
fp=fopen("1.txt","rt");
while((fread(p,sizeof(struct student_type),1,fp)))
{
p1->next=p;
p1=p;
p=(struct st_type *)malloc(N);
}
printf("请输入学生学号:\n");
scanf("%d",&p->massage.num);
printf("请输入学生姓名:\n");
scanf("%s",p->);
printf("请输入学生专业:\n");
scanf("%s",p->massage.major);
printf("请输入学生班级:\n");
scanf("%d",&p->massage.cla);
printf("请输入学生所分入营号:\n");
scanf("%d",&p->massage.ying);
printf("请输入学生所分入连号:\n");
scanf("%d",&p->massage.lian);
while(1)
{
p1->next=p;
p1=p;
p=(struct st_type *)malloc(N);
printf("\n是否继续输入?(是输y,否输n)\n");
fflush(stdin);
scanf("%c",&a);
if(a=='n')
break;
system("cls");
printf("请输入学生学号:\n");
scanf("%d",&p->massage.num);
printf("请输入学生姓名:\n");
scanf("%s",p->);
printf("请输入学生专业:\n");
scanf("%s",p->massage.major);
printf("请输入学生班级:\n");
scanf("%d",&p->massage.cla);
printf("请输入学生所分入营号:\n");
scanf("%d",&p->massage.ying);
printf("请输入学生所分入连号:\n");
scanf("%d",&p->massage.lian);
}
p1->next=NULL;
free(p);
save(head);
}。

相关文档
最新文档