1、 ******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2011年春季学期 C程序设计 课程设计 题 目: 协会会员管理系统 专业班级:计算机科学与技术6班 姓 名: 罗重凡 学 号: 10240641 指导教师: 成 绩:_____________ 摘 要 协会会员管理系统是一个工作单位不可缺少
2、的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以协会会员管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个协会基本上都是靠传统的人工方式来管理协会信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。 当今社会,信息迅速膨胀,随着各个公司的规模增大,有关信息管理工作所涉及的数据量越来越大,会员信息量也大大增加,利用传统的手工查询、登记、修改等方法的处理速度远远跟不上需求,有的公司不得不靠增加人力、物力来进行信息管理。 随着计算机技术的不断提高,计算机作为知识经济
3、时代的产物,其强大的功能已为人们深刻认识,它已进入人类社会的各个行业和领域并发挥着越来越重要的作用,成为人们工作和生活中不可缺少的一部分。 而作为计算机应用的一部分,使用计算机对会员进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高协会会员管理的效率,也是协会的科学化、正规化管理和与世界接轨的重要条件。 协会会员管理系统作为一种管理软件正在各协会中得到越来越广泛的应用,且已达到了良好效果 目 录 一、需求分析 1 二、总体设计 2 三、详细设计 3 1、数据定义 3 2、算
4、法流程图………………………………………………………..3 四、编码…………………………………………………………………4 五、调试………………………………………………………………….5 六、设计总结……………………………………………………………7 致谢………………………………………………………………………8 参考文献…………………………………………………………………9 附录...............................................................10 一、需求分析 协会会员管理系统: 1、问题描述 对协会的会员进行管理,包括
5、插入、删除、查找、排序等功能。 2、要求 会员对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月(数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等信息。 (1)新增一名会员:将新增会员对象按姓名以字典方式会员管理文件中。 (2)删除一名会员:从会员管理文件中删除一名会员对象。 (3)查询:从管会员理文件中查询符合某些条件的会员。 (4)添加:增加某个会员对象。 (5)打印:按某种需要对会员对象文件进行打印。 3、实现功能 (1)由键盘输入会员对象,以文件方式保存。程序执行时先将文件读入内存。 (2)对对象中的“姓名”按字典顺序进行排序。
6、 (3)对排序后的会员对象进行增、删、查询、修改、打印等操作。 二、总体设计 1、输入功能的实现:要想实现会员管理系统的输入,必须要建立一个会员信息系统的抽象数据类型,其中会员信息以链表的存储方式实现。由键盘输入会员对象,以文件方式保存。程序执行时先将文件读入内存。 2、系统处理功能的实现:系统管理员根据协会的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对会员对象中的"姓名"按字典顺序进行排序;对排序后的会员对象进行增、删、查询、修改、打印等操作。 3、输出的实现:根据选择的操作,输出与之对应的信息。 综上可以绘制出管理会员信息功能的系统流程图,
7、如图1所示 图1 系统流程图 三、详细设计 1、数据定义 结构体类型 变量、数组、指针变量 2、算法流程图 1)保存函数Save()的算法流程图如图Y所示。 FILE *fp; (fp=fopen(outfile,"wb"))==NULL printf("\nSaving file......\n"); printf("can not open file\n"); p!=NULL fclose(fp); fwrite(p,sizeof(SALARY),1,fp); 图Y 保存函数Save()的算法流程图
8、 2)系统总体框图 根据会员管理系统问题的分析和设计要求,可以得到该会员管理系统可以分为五个模块:会员信息添加模块、会员信息修改模块、会员信息删除模块、会员信息查询模块、会员信息排序模块。其系统功能结构如图2所示。 会员管理系统 输入会员记录 查询会员记录\ 修改会员记录 删除会员记录 追加会员记录 输出会员记录\ 统计会员情况 退出系统 图1 工资管理系统功能模块图 3)模块设计 在我们设计的程序中: 首先是定义了一个输入输出头文件,接着是一个宏定义,下面是函数声名部分,用struct emploee Char no[5]; char n
9、ame[8]; int post-wage; int prize; int deduct int net pay; }结构体存储和录入该程序的所有数据,并把信息写到文件emp.dat中,保存在磁盘中方便以后使用。主函数部分包括设计的全部信息,有指导教师、设计者以及设计时间,之后是输出主菜单和调用函数,退出程序。 此程序中包含的功能有:输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块,各个功能设计如下: 输入模块:该模块是实现对会员号 姓名 岗位 扣除 实发的录入并保存到文件“emp ”中。模块中运用void input()调用函数展开对文件的使用。模块首先定
10、义一个指针文件,又以写的方式打开此文件,在打开的文件中输入要管理的会员人数,用一个for循环按照职会员号 姓名 岗位 扣除 实发的格式循环获取会员的记录,接着又用了一个for循环将会员记录写入文件“emp ”中,关闭文件。 查询模块:实现按会员号查询每个会员的信息,查询显示:会员号 姓名 岗位 扣除 实发。模块开始是一个二级子菜单,一个是实现按会员号查询,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按会员号查询,首先是以只读的方式打开文件“emp”,然后输入要查询的会员号,用一个for循环来控制查询的人数,之后在显示器上显示会员信息,程序如下: printf("会员
11、号 姓名 岗位 扣除 实发\n"); printf("%6d%9s%6d%6d%6d%6d\n",emp[i].no,emp[i].name,emp[i].post-wage,emp[i]. prize,emp[i].deduct,emp[i].net pay);然后关闭文件。查询会员信息已完成。 修改模块:该模块实现按会员号对会员所有信息的修改。模块开始是一个二级子菜单,一个是按会员号修改,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按会员号修改,首先是以读写的方式打开文件“emp”。输入要修改的会员号,用一个for循环来控制输入的数量,循环如下: for(i=0;
12、fread(&emp[i],sizeof(struct emploee),1,fp);i++) if(!strcmp(emp[i].no,num))break; 则会出现该会员的信息如下: printf("记录号 会员号 姓名 性别 年龄 工资\n"); printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex,emp[i].age,emp[i].salar); 然后对会员的
13、信息进行修改,就可获得新的会员记录。之后文件指针指向该修改的记录开头,此时用newemp覆盖当前记录,修改完成时系统会显示修改后的文件数据:记录号、 会员号、 姓名 、性别 、年龄 、工资,然后关闭文件。修改会员信息已完成。 删除模块:该模块实现按会员号对会员所有信息的删除。模块开始是一个二级子菜单,一个是按会员号删除记录,另一个是选择退出返回主菜单,此处是利用switch选择语句。选择按会员号删除记录,首先是只读的方式打开一个二进制文件“emp”。就会显示删除前的会员信息程序如下: printf("删除前:\n"); printf("记录号 会员号 姓名 性别 年龄 工资\n
14、");
for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++)
printf("%6s%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex,emp[n].age,emp[n].salar);
输入要删除的会员号,如果存在由fp=fopen("emp","w+");
if(n==1)
{
fclose(fp);
exit(3);
执行删除命令:
使用for(j=i+1;j 15、mploee),1,fp);循环依次改后会员信息写入文件,显示删除后文件中的会员信息。最后可以关闭文件,删除会员信息已完成。
统计模块:根据输入的工资,显示大于该工资的会员的所有信息。模块中运用void stat ()调用函数展开对文件的使用。首先是以只读的方式打开文件“emp”。输入会员的工资数,运用for循环根据输入的工资,显示大于该工资的会员的所有信息。关闭文件,统计完成。
输出模块:该模块实现按会员号输出会员的所有信息。在该模块中运用void output()调用函数展开对文件的使用。首先以只读的方式打开一个文本文件”emp”。操作无误则用for循环输出正在查询会员的:记录号 会员 16、号 姓名 性别 年龄 工资。这些完成后用fclose(fp)函数关闭文件。模块运行结束。
追加模块:该模块实现添加会员的信息。在该模块中运用void run()调用函数展开对文件的使用。首先以读写的方式为读写打开一个二进制的文件“emp”。输出“要追加的会员人数”待输入要追加的个数后,用for循环控制待输入的会员信息。用fwrite(&newemp,sizeof(struct emploee),1,fp)将该会员记录写入文件。用fclose(fp)函数关闭文件,模块运行结束。
2
四、编码
1、增加会员信息
2、查询会员信息
3、修改会员信息
4、打印会员信息
5、输出 17、会员信息
6、统计会员信息
7、删除会员信息
五、测试
程序的初始界面
对程序的功能进行选择
输入会员信息
打印会员信息
六、设计总结
在大一结束之际我终于接触到了计算机专业的实用性课程,觉得很有挑战性,同时可以让我明白自己的能力和专业知识是否扎实,再查漏补缺。在这次我对编程有了大体的了解。程序中包括主函数、输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块。在此过程中深刻体会到编程是一个庞大的项目,它需要细心,耐心,更需要各个成员之间的相互协作,也真正体会到C语言在当代社会乃至未来生活中的重要性。
美中不足的就是:由于我们知识的不足以 18、及条件的限制,本系统还有许多漏洞与不足,希望老师给以批评与帮助,我们会积极改正,再接再厉。希望在不久的将来别人能够用到我们做的系统,或者成为IT行业中优秀的一员。加油!
致谢
经过学习c语言程序设计这门课,让我对程序设计这门课有了更深一步的理解。我会在以后的学习生活中努力的锻炼自己,开动脑筋,用心思维,使自己在c语言程序设计这门课上乃至在其他方面有更大的进步。
在此感谢此次课程设计中给予指导的老师和各位同学的帮助,使我完成了这次课程设计。
参考文献
1.姜灵芝,余健. C语言课程设计案例精编.北京:清华大学出版社,2008
2.王新,孙雷. C语言课程设计.北京:清华大学出版社 19、2009
3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:清华大学出版社,2011
4.王连相.C/C++程序设计上机指导与测试. 北京:中国铁道出版社,2006
5.C语言函数手册,机械工业出版社,1999
附录1
#include 20、/定义专业
char techang[20]; //定义特长
char zhuangtai[20]; //定义状态
int age;//定义年龄
int number;//定义会员编号
}xh[200];
int menu();
int input();
void find(int);
int insert(int);
void print(int);
void main()
{
int c=0,d=0;
while(1)
{
switch(menu())
{
case 1:c=input();break;
cas 21、e 2:find(c);break;
case 3:c=insert(c);break;
case 4:print(c);break;
case 5: exit(0);
}
}
}
menu()
{
int d;
system("cls");
printf("\n");
printf("\t 协会会员管理系统\n");
printf("\t!!!!!!!!!!!!!!!!!!!!!!!\n");
printf("\t|1| 输入会员信息。\n");
printf("\t|2| 指定查找会员。 \n");
printf(" 22、\t|3| 添加会员信息。\n");
printf("\t|4| 打印会员信息。\n");
printf("\t|5| 退出。 \n");
printf("\t!!!!!!!!!!!!!!!!!!!!!!!\n\n");
printf("\t请选项:");
scanf("%d",&d);
return d;
}
input()//输入会员信息
{
int i,n;
printf("\n");
printf("输入会员人数:\n");
scanf("%d",&n);
for (i=0;i 23、 printf("名称:",i+1);
scanf("%s",xh[i].name);
getchar();
printf("性别:",i+1);
scanf("%s",xh[i].sex);
getchar();
printf("年龄:",i+1);
scanf("%d",&xh[i].age);
printf("状态:",i+1);
scanf("%s",xh[i].zhuangtai);
getchar();
printf("会员编号:",i+1);
scanf("%d",&xh[i].number);
pr 24、intf("专业:",i+1);
scanf("%s",&xh[i].zhuanye);
getchar();
printf("院系:",i+1);
scanf("%s",xh[i].yuanxi);
getchar();
printf("特长:",i+1);
scanf("%s",xh[i].techang);
getchar();
printf("\n\n");
}
return n;
}
void find(int c)//按名称指定查找会员信息
{
int i;
char a[20];
printf(" 25、\n");
printf("请输入查找名称:\n");
scanf("%s",a);
getchar();
for (i=0;i 26、f("会员编号:");
printf("%d\n",xh[i].number);
printf("专业:");
printf("%s\n",xh[i].zhuanye);
printf("院系:");
printf("%s\n",xh[i].yuanxi);
printf("特长:");
printf("%s\n",xh[i].techang);
system("pause");
getchar();
}
}
}
insert(int c)//添加会员信息
{
int i,j;
27、 system("cls");
printf("\n");
printf("添加会员人数:\n");
scanf("%d",&j);
getchar();
for (i=0;i 28、
printf("状态:");
printf("%s\n",xh[i].zhuangtai);
printf("会员编号:");
printf("%d\n",xh[i].number);
printf("专业:");
printf("%s\n",xh[i].zhuanye);
printf("院系:");
printf("%s\n",xh[i].yuanxi);
printf("特长:");
printf("%s\n",xh[i].techang);
printf("\n\n");
c++ 29、
}
return c;
}
void print(int c)//打印会员信息
{
int i;
system("cls");
getchar();
printf("\t打印所有会员信息\n");
printf("*************************************************************************\n");
printf("名称\t性别\t年龄\t状态\t会员编号\t专业\t院系\t特长\n");
printf("********************* 30、\n");
for (i=0;i






