C语言课程设计报告正式.docx

上传人:b****8 文档编号:9558775 上传时间:2023-02-05 格式:DOCX 页数:36 大小:235.41KB
下载 相关 举报
C语言课程设计报告正式.docx_第1页
第1页 / 共36页
C语言课程设计报告正式.docx_第2页
第2页 / 共36页
C语言课程设计报告正式.docx_第3页
第3页 / 共36页
C语言课程设计报告正式.docx_第4页
第4页 / 共36页
C语言课程设计报告正式.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告正式.docx

《C语言课程设计报告正式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告正式.docx(36页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告正式.docx

C语言课程设计报告正式

课程设计报告

课程名称《C语言程序设计》

课题名称班级档案管理系统

专业

班级

学号

姓名

指导教师

 

2011年7月5日

湖南工程学院

课程设计任务书

 

课程名称《C语言程序设计》

课题班级档案管理系统

专业班级1

学生姓名

学号

指导老师

审批

 

任务书下达日期2011年6月5日

 

任务完成日期2011年7月5日

 

目录.....................................3

一.需求分析……………………………………….4

二.概要设计………………………………………..5

三.详细设计………………………………………..6

四.调试分析……………………………………....16

五.体会…………………………………………….20

六、源程序…………………………………………….21

七、评分表………………………………………….32

 

一.需求分析:

班级档案管理系统有六十一种功能,把这11个功能做成11个子函数。

在主函当数中设计一个菜单对这11个子数进行管理。

来实现对整个系统的操作。

根据课题的要求,每个数据的结构应当包括:

学号(char)、姓名(char)、性别(char)、年龄(int)、备注(char)。

对一个有N个学生的班级,通过该系统实现对该班级学生的基本信息进行录入、显示、修改、删除、保存等操作的管理。

最后为了以后按照处理后的顺序保存到文件中。

系统管理者可以根据需要,对密码进行重新设置。

 

二.概要设计:

程序的抽象数据类型的定义:

数据结构:

结构体类型数组

structstudent//定义结构体

{charname[20];/*姓名*/

intnumber;/*学号*/

charsex;/*性别*/

intage;/*年龄*/

charremarks[100];/*备注*/

}students[N]

程序的模块组成:

录入记录函数:

voidInsert(int*count_a)

显示记录函数:

voidShow(intcount_b)

删除记录函数:

voidDelete(int*count_c)

修改记录函数:

voidUpdate1(intcount_d)

记录保存为文件函数:

voidSave(structstudent*p,intn)

按学号查找显示记录函数:

voidSearch1(intcount1)

按姓名查找显示记录函数:

voidSearch2(intcount2)

按性别查找显示记录函数:

voidSearch3(intcount3)

按年龄查找显示记录函数:

voidSearch4(intcount4)

修改密码函数:

voidUpdate2(char*pointer1,char*pointer2)

各个函数的主要功能:

录入函数:

随时输入数据。

显示函数:

显示所有学生的信息。

删除函数:

删除某学生的信息。

修改函数:

修改某学生的信息。

查找函数:

方便查找所有学生的信息。

保存函数:

保存好学生信息,以免丢失。

修改密码函数:

修改密码。

课题的功能模块的划分:

由于是学生数据,数据多、数据结构相似的特点,很自然的会用数组实现数据的存储。

该课题操纵的总体数据结构是文件类型的数据,文件的记录为结构体数据,数据库结构用文件来实现。

需要存储的数据有:

学生的姓名,学号,性别,年龄,备注等。

三.详细设计

 

系统功能结构图

 

采用C语言定义相关的数据类型:

#defineN1000/*定义常数表示记录数*/

structstudent//定义结构体

{charname[20];/*姓名*/

intnumber;/*学号*/

charsex;/*性别*/

intage;/*年龄*/

charremarks[100];/*备注*/

}students[N]

各模块的类C码算法:

查找函数:

voidSearch1(intcount1)//学生基本信息按学号查询函数

{inti,number,flag=1,n=0;

printf("请输入要查询的学生的学号:

\n");

scanf("%d",&number);

for(i=0;i

if(students[i].number==number)

{printf("姓名:

%1s",students[i].name);

printf("学号:

%4d",students[i].number);

printf("性别:

%c",students[i].sex);

printf("年龄:

%3d",students[i].age);

printf("备注:

%s",students[i].remarks);

flag=0;n=n+1;

}

if(n==0)

printf("没有查询到该学生的资料!

\n\n");

}

voidSearch2(intcount2)//学生基本信息按姓名查询函数

{inti,flag=1,n=0;

charname[20];

printf("请输入要查询的学生的姓名:

\n");

scanf("%s",name);

for(i=0;i

if(strcmp(students[i].name,name)==0)

{printf("姓名:

%1s",students[i].name);

printf("学号:

%4d",students[i].number);

printf("性别:

%c",students[i].sex);

printf("年龄%3d",students[i].age);

printf("备注:

%s",students[i].remarks);

flag=0;n=n+1;

}

if(n==0)

printf("没有查询到该学生的资料!

\n\n");

}

voidSearch3(intcount3)//学生基本信息按性别查询函数

{

inti,n=0;

charsex;

printf("请输入要查询的学生的性别:

\n");

scanf("%s",&sex);

for(i=0;i

if(students[i].sex==sex)

{printf("姓名:

%8s",students[i].name);

printf("学号:

%4d",students[i].number);

printf("性别:

%c",students[i].sex);

printf("年龄:

%3d",students[i].age);

printf("备注:

%s",students[i].remarks);

printf("\n\n");

n=n+1;

}

if(n==0)

printf("没有查询到符合该性别的学生的资料!

\n\n");

}

voidSearch4(intcount4)//学生基本信息按年龄查询函数

{inti,age,n=0;

printf("请输入要查询的学生的年龄:

\n");

scanf("%d",&age);

for(i=0;i

{if(students[i].age==age)

{printf("姓名:

%8s",students[i].name);

printf("学号:

%4d",students[i].number);

printf("性别:

%c",students[i].sex);

printf("年龄:

%3d",students[i].age);

printf("备注:

%s",students[i].remarks);

n=n+1;

printf("\n\n");

}

}

if(n==0)

printf("没有查询到符合该年龄的学生的资料!

\n\n");

}

输入函数:

voidInsert(int*count_a)//学生基本信息录入函数

{inti,in_number,n=0;

if(*count_a==N)

{printf("空间已满!

");return;}

printf("请输入学生的学号:

\n");

do

{do

{

scanf("%d",&in_number);

for(i=0;i<*count_a;i++)

if(students[i].number==in_number)

printf("已有相同的学号,请重新输入!

\n\n");

}while(students[i].number==in_number);

if(in_number<1)

printf("输入错误,请重新输入大于零的整数!

\n");

}while(in_number<=0);

students[i].number=in_number;

printf("请输入姓名:

\n");

scanf("%s",&students[i].name);

printf("请输入性别:

\n");

scanf("%s",&students[i].sex);

printf("请输入年龄:

\n");

scanf("%d",&students[i].age);

printf("请输入备注:

\n");

scanf("%s",&students[i].remarks);

(*count_a)++;

printf("\n\n");n=n+1;

if(n!

=0)

printf("学生资料录入成功!

");

}

显示记录函数:

voidShow(intcount_b)//学生基本信息显示函数

{inti;

printf("\n\n");

for(i=0;i

{printf("姓名:

%8s",students[i].name);

printf("学号:

%4d",students[i].number);

printf("性别:

%c",students[i].sex);

printf("年龄:

%3d",students[i].age);

printf("备注:

%s",students[i].remarks);

printf("\n\n");

}

}

删除记录函数:

voidDelete(int*count_c)//学生基本信息删除函数

{inti,j,n=0,number,flag=1;

printf("请输入要要删除的学生的学号:

\n");

scanf("%d",&number);

for(i=0;i<*count_c&&flag;i++)

{if(students[i].number==number)

{for(j=i;j<*count_c-1;j++)

students[j]=students[j+1];

flag=0;

(*count_c)--;n=1;

}

}

if(n==0)

printf("没有查询到可以删除的资料!

\n");

if(n!

=0)

printf("资料删除成功!

\n");

}

修改记录函数:

voidUpdate1(intcount_d)//学生基本信息修改函数

{inti,n=0,number,flag=1;

printf("请输入要修改的学生的学号:

\n");

scanf("%d",&number);

for(i=0;i

{

if(students[i].number==number)

{

printf("请输入姓名:

\n");

scanf("%s",&students[i].name);

printf("请输入学号:

\n");

scanf("%d",&students[i].number);

printf("请输入性别:

\n");

scanf("%s",&students[i].sex);

printf("请输入年龄:

\n");

scanf("%d",&students[i].age);

printf("请输入备注:

\n");

scanf("%s",&students[i].remarks);

flag=0;n=1;

}

}

if(flag==1)

printf("没有查询到该学生的资料!

\n\n");

if(n!

=0)

printf("资料修改成功!

\n");

}

保存记录函数:

voidSave(structstudent*p,intn)//学生基本信息保存函数

{FILE*fp;

inti,j=0;

if((fp=fopen("stu.dat","wb+"))==NULL)

{printf("不能打开文件!

\n");

return;

}

for(i=0;i

if(fwrite(p,sizeof(structstudent),1,fp)!

=1)

{printf("文件写入错误!

\n");

j=1;

}

if(j==0)

printf("已将学生档案保存在stu.dat文件中!

\n");

fclose(fp);

}

修改密码函数:

voidUpdate2(char*pointer1,char*pointer2)//系统密码修改函数

{charpoint[50]="",ch;

intn=0,b=0;

do

{

printf("请输入旧密码:

\n");

for(b=0;b<=50;b++)

{if((ch=getch())!

='\r')

{point[b]=ch;

printf("*");

}

else

break;

}

if(strcmp(point,pointer1)==0)

{do

{n=0;

printf("\n");

printf("请输入新密码:

\n");

for(b=0;b<=50;b++)

{if((ch=getch())!

='\r')

{pointer1[b]=ch;

printf("*");

}

else

break;

};

printf("\n");

printf("请再次输入新密码:

\n");

for(b=0;b<=50;b++)

{if((ch=getch())!

='\r')

{pointer2[b]=ch;

printf("*");

}

else

break;

};

if(strcmp(pointer1,pointer2)!

=0)

{

printf("第二次输入的新密码与第一次输入的新密码不相同,请重新输入!

\n");

n=n+1;

}

}while(n!

=0);

printf("\n");

printf("密码修改成功!

\n");

n=2;

}

if(n==0)

{

printf("\n");

printf("旧密码输入错误!

请重新输入!

\n");

}

}while(n==0);

}

画出函数的调用关系图

 

main函数的下属子功能函数及其调用示意图:

 

四.调试分析

 

进入系统时的界面

系统主菜单

 

显示记录

保存记录

删除记录

查询记录

 

修改记录

修改密码

自己对C语言掌握的并不很理想,在进行课程设计的时候,对于用户的需求分析不足,程序在初步调试的时候出了很多问题,还有就是我对一些基本知识理解的不足,后通过老师的指点和同学们的帮助,在规定的时间内我这个程序达到了老师要求实现的功能。

但由于时间匆忙,加上我对编程的基本知识和技巧不熟练,本程序还有一些细节上的问题有待改进。

由于本课题中的许多知识点都没有学过都要靠自己到课外的资料中去查找。

在用的时候难免出现这样那样的错误。

如开始设计出来的菜单不是预想的那样,而是总个窗中出现混乱。

解决的这个问题的办法是调整。

再就是自定义函数时由于课本的概念不清楚,多写了空格键,以至函数调用不出来。

又如:

在设计修改密码时。

当用户发现输入密码错误按了退格键后,因为“*”并没有消去。

导致用户再次按退格键,又出现前面的情况。

最终导致输入密码错误。

一个系统的菜单和提示信息非常重要。

如果没有这些用户根本不知道怎么用你设计的这个系统。

在设计的调试过程中也无法顺利的完成调试工作。

有了一个清晰简单的菜单和一些提示信息这后,调试过程完成的非常顺利。

一周的程序设计和上机调试使我觉得:

一个教好的程序,着眼点应该是为满足用户的需求,要使用户操作起来非常的方便而不必知道程序的原理和功能的具体实现,因此必须有一个友好的用户界面和方便使用的功能操作。

我们在编程的时候应该尽量做到使程序简单,易读,用户界面应尽量做得美观,易于操作。

 

五.体会

通过C课程设计实验课使我了解到了一个程序开发的过程,虽然规模不大,但为我以后的编程学习打下了基础。

在编程的过程中,我体会到了学习编程的辛苦,为了一个算法的实现而思考,为了一个小小的编译错误而花时间去寻找,这需要很大的毅力和耐心,而且要有良好的思维,这才使得我完成这个任务,也使我感到一分喜悦,毕竟自己完成了一个有模有样的程序。

于此,我也发现自己的一些不足,良好的编程习惯的养成,坚定的毅力和耐心仍是我要加强的,同别人的交流也是必须的,这样才能不断使我进步。

高手们往往是在日日夜夜中磨练出来的,我也要向着更高的方向前进,这是我的梦想。

在这我也感谢老师对我的关怀和帮助,对于她的教学我也很满意。

在此也提出小小的建议:

在学习C的过程中我们先是以理论学习,后是进行上机实践,这也是符合客观规律的,但我认为可以把实践提前,先讲解一些预备知识(能够编出一个或几个小程序)接着就上机实践,让学生知道学的东西有什么用,怎样用,然后在原有基础上加深,譬如在原有程序上改进,增加功能,这也就涉及一些未学的东西,逼着他们自己去学,这时也可以加一些理论讲解,使学生从实践中了解自己需要学习的东西。

这样使同学不会觉得学了一大堆东西不知有什么用处。

以上只是我个人的意见,毕竟没有什么教学经验,在很多方面还没考虑到,希望老师参考。

回顾起此次课程设计,我感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体通过这次课程设计之后,也把以前所学过的知识重新温故。

在设计中遇到了很多编程问题,最后在几位老师的辛勤指导下,终于游逆而解。

同时,在各老师的身上我学得到很多实用的知识,在次我表示感谢!

六、源程序

#include/*I/O函数*/

#include/*字符串函数*/

#defineN1000/*定义常数表示记录数*/

structstudent//定义结构体

{charname[20];/*姓名*/

intnumber;/*学号*/

charsex;/*性别*/

intage;/*年龄*/

charremarks[100];/*备注*/

}students[N]={"王小名",1,'m',18,"\0","黄小名",2,'m',19,"\0","黎明",3,'m',18,"\0",

"张燕",4,'w',19,"\0","李燕",5,'w',18,"\0","王鹰",6,'m',18,"\0","张飞",7,'m',18,"\0",

"张兰",8,'w',20,"\0","王刚",9,'m',19,"\0","王小燕",10,'w',18,"\0"};/*定义结构体数组*/

//函数声名

voidInsert(int*count_a);/*输入记录*/

voidShow(intcount_b);/*显示记录*/

voidSave(structstudent*p,intn);/*记录保存为文件*/

voidDelete(int*count_c);/*删除记录*/

voidUpdate1(intcount_d);/*修改记录*/

voidSearch1(intcount1);/*按学号查找显示记录*/

voidSearch2(intcount2);/*按姓名查找显示记录*/

voidSearch3(intcount3);/*按性别查找显示记录*/

voidSearch4(intcount4);/*按年龄查找显示记录*/

voidUpdate2(char*pointer1,char*pointer2);/*修改密码*/

intmain()

{

charcode1[50]={"123"},code2[50];

intz1;

chara1;

intcount=0;

printf("\t\t\t********************\n\t\t\t*班级档案管理系统*\n\t\t\t********************\n");

printf("初始密码为:

123\n\n");

printf("请输入密码:

\n");

do

{

for(b=0;b<50;b++)

code2[b]='\0';

for(b=0;b<50;b++)

{

if((ch=getch())!

='\r')

{code2[b]=ch;

printf("*");

}

else

break;

}

if(strcmp(code1,code2)==0)//对输入的密码进行判断

do

{

printf("\n\n");

printf("请选择系统功能项:

\n");

printf("\t\ta.学生基本信息录入\n");

printf("\t\tb.学生基本信息显示\n");

printf("\t\tc.学生基本信息保存\n");

printf("\t\td.学生基本信息删除\n");

printf("\t\te.学生基本信息修改\n");

printf("\t\tf.学生基本信息查询\n");

printf("\t\t\t1.按学号查询\n\t\t\t2.按姓名查询\n\t\t\t3.按性别查询\n\t\t\t4.按年龄查询\n");

printf("\t\tg.退出系统\n\t\th.修改密码\n\n请选择:

\n");

scanf("%s",&a1);

switch(a1)

{

case'a':

Insert(&c

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

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1