C语言课程设计大学社团管理系统 .doc
2010/5/29东北大学秦皇岛分校C语言课程设计一、 有关变量、结构体的说明:1) 对变量的说明:num是对成员的学号的定义数组,长度为不超过10个;name是对成员的姓名的定义数组,长度不超过20个字符;phone是对成员的手机号的定义,为一长整形;number是对活动的队长的学号的定义数组,长度不超过10个字符;nam是对活动名称的定义数组,活动名称所占字符不超过30个;date是对活动日期的定义,定义类型为整形。2) 对结构体的说明:在本程序中定义了两个结构体,分别为Member和Activity,分别包含了社团中的成员信息和社团活动信息,这两个结构体分别包含了num,name,phone和number,nam,date等来实现程序的功能,这些在源文件的注释中都有体现。3) 对函数的说明: Input() 成员信息输入 Display() 显示所有成员信息 Sort_by_num() 按照成员学号对成员进行排序 Delete_a_record() 删除一条成员信息 Query_a_record() 查找并显示一个成员的信息 Addfromtext() 从文本文档中添加成员信息 Writetotext() 将成员信息写入文本文档 Input_act() 活动信息输入Display_act() 显示所有活动信息Delete_a_act() 删除一条活动记录Query() 查询并显示一条活动信息AddfromText() 从文本文档中读取活动信息WritetoText() 将活动信息写入写入文本文档二、 树形结构模块图:三、操作说明:这个程序很容易上手,运行该程序时,在出现的界面上会出现14个选项,分别为:1) 成员信息输入;2) 显示所有成员记录;3) 将成员按学号排序;4) 删除一条成员信息;5) 成员信息查询;6) 从文本文档中读取成员信息;7) 将成员信息写入文本文档;8) 活动信息输入;9) 显示所哟活动信息;10) 删除一条活动信息;11) 活动信息查询;12) 从文本文档中读取数据;13) 将活动信息写入文本文档;0) 退出系统。具体如下所示:1. 起始欢迎界面2. 成员信息输入3. 显示所有成员信息4. 将成员按照学号排序5. 删除一条成员信息6. 成员信息查询7. 从文本文档中读取成员信息8. 将成员信息写入文本文档9. 活动信息输入10. 显示所有活动信息11. 删除一条活动信息12. 活动信息查询13. 从文本文档中读取活动信息此为读取数据失败时的提示。14. 将活动信息写入文本文档15. 退出系统在操作时只需按照提示和自己的需要完成操作即可,简单容易,有效地节省使用者的时间,有效地提高工作效率。四、 源程序及代码:#include<stdio.h> /引用库函数#include<stdlib.h>#include<ctype.h>#include<string.h>typedef struct /定义结构体数组char num10; /学号char name30; /姓名long phone; /手机号码Member;Member meme80; /结构体数组变量typedef structchar number10; /学号char nam20; /活动名称int date; /活动日期Activity;Activity act80;int menu_select() /菜单函数int c;dosystem("cls"); /运行前清屏printf("n");printf("*欢 迎 使 用 大 学 社 团 管 理 系 统*n"); /*菜单选择*/ printf(" 1. 成员信息输入;n"); printf(" 2. 显示所有成员记录;n"); printf(" 3. 将成员按学号排序;n"); printf(" 4. 删除一条成员信息;n"); printf(" 5. 成员信息查询;n"); printf(" 6. 从文本文档中读取成员信息;n");printf(" 7. 将成员信息写入文本文档;n"); printf(" 8. 活动信息输入;n"); printf(" 9. 显示所有活动信息;n"); printf(" 10. 删除一条活动信息;n"); printf(" 11. 活动信息查询;n");printf(" 12. 从文本文档中读取活动信息;n");printf(" 13. 将活动信息写入文本文档;n"); printf(" 0. 退出系统。n"); printf("*n"); printf("*|欢迎 使用|欢迎 使用|*n"); printf("*n"); printf("n"); printf("请在013之间做出选择:"); scanf("%d",&c); /读入选择while(c<0|c>13);return(c); /返回选择int Input(Member mem,int n) /输入成员信息int i=0;char sign,x10; /x10为了清除多余的数据while(sign!='n'&&sign!='N') /判断printf("成员学号:"); /交互式输入scanf("%s",memn+i.num);printf("成员姓名:");scanf("%s",memn+i.name);printf("成员手机号:");scanf("%ld",&memn+i.phone);gets(x); /清除多余的输入printf("要输入更多的成员信息吗?(Y/N)");scanf("%c",&sign); /输入判断i+;return(n+i);void Display(Member mem,int n) /显示所有成员记录int i;printf("-n"); /*格式头*/ printf(" 学号 姓名 手机n"); printf("-n"); for(i=1;i<n+1;i+) /循环输入printf("%-16s%-15s%ldn",memi-1.num,memi-1.name,memi-1.phone); if(i>1&&i%10=0) /每十个暂停printf("-n"); /*格式*/ system("pause");printf("-n"); printf("n");system("pause");void Sort_by_num(Member mem,int n) /对成员按照学号排序int i,j,*p,*q,s; /定义指针类型用以排序char t10;for(i=0;i<n-1;i+) /冒泡法排序for(j=0;j<n-1;j+)if(strcmp(memj.num,memj+1.num)>0) strcpy(t,memj+1.num);strcpy(memj+1.num,memj.num); strcpy(memj.num,t); strcpy(t,memj+1.name); strcpy(memj+1.name,memj.name); strcpy(memj.name,t); p=&memj+1.phone; q=&memj.phone; s=*p;*p=*q;*q=s;int Delete_a_record(Member mem,int n) /按姓名查找并删除一条成员信息char s20;int i=0,j;printf("请输入要删除的成员姓名:"); /交互式问询scanf("%s",s);while(strcmp(memi.name,s)!=0&&i<n) i+; /*查找判断*/ if(i=n)printf("未发现此成员!n");return(n); /返回失败信息for(j=1;j<n-1;j+)strcpy(memj.num,memj+1.num); strcpy(memj.name,memj+1.name); memj.phone=memj+1.phone; printf("删除中.n");printf("删除成功!"); /返回成功信息return(n-1);void Query_a_record(Member mem,int n) /*查找并显示一个成员的信息*/ char s20;int i=0;printf("请输入要查询的成员姓名:"); /*交互式输入*/ scanf("%s",s); while(strcmp(memi.name,s)!=0&&i<n) i+; /*查找判断*/ if(i=n)printf("未发现此成员!"); /显示失败信息return;printf("查询中.n");printf("该成员学号为:%sn",memi.num); /*输出该成员信息*/ printf("该成员手机号为:%dn",memi.phone); int Addfromtext(Member mem,int n) /从文件中读取成员信息 int i=0,num; FILE *fp; /*定义文件指针 char filename20; /定义文件名 printf("请输入文件名(如wenjian.txt):"); scanf("%s",filename); /输入文件名 if(fp=fopen(filename,"rb")=NULL) /打开文件printf("打开文件错误,请检查文件的正确性!n"); /打开失败信息 printf("n"); system("pause"); return(n); fscanf(fp,"%d",&num); /读入总记录量 while(i<num) /循环读入数据 fscanf(fp,"%s%s%d",memn+i.num,memn+i.name,&memn+i.phone); i+; n+=num; fclose(fp); /关闭文件printf("读取中.n"); printf("读入文件成功!n"); printf("n"); system("pause"); return(n); void Writetotext(Member mem,int n) /将所有记录写入文件int i=0; FILE *fp; /定义文件指针 char filename20; /定义文件名 printf("请输入要写入的文件名(如wenjian.txt):"); /输入文件名 scanf("%s",filename); if(fp=fopen(filename,"w")=NULL) /打开文件 printf("不能打开此文件,请检查文件的正确性!n"); system("pause"); return; fprintf(fp,"%dn",n); /循环写入数据 while(i<n) fprintf(fp,"%-16s%-15s%dn",memi.num,memi.name,memi.phone); i+; fclose(fp); /关闭文件printf("正在写入信息.n");printf("信息写入成功!n"); /返回成功信息 int Inpute_act(Activity acti,int n) /输入活动记录int j=0;char sign,x10;while(sign!='n'&&sign!='N')printf("队长学号:"); /交互式输入scanf("%s",&actin+j.number);printf("活动名称:");scanf("%s",actin+j.nam);printf("请输入活动时间(如若活动时间为2010年3月15日,则输入20100315):");scanf("%d",&actin+j.date);gets(x);printf("要输入更多活动信息吗?(Y/N)"); /输入判断scanf("%c",&sign);j+;return(n+j);void Display_act(Activity acti,int n)int j;printf("-n"); /*格式头*/ printf("队长学号 活动姓名 活动日期n"); printf("-n"); for(j=1;j<n+1;j+)printf("%-16s%-15s%dn",actij-1.number,actij-1.nam,actij-1.date);if(j>1&&j%10=0)printf("-n"); /*格式*/ system("pause");printf("-n"); printf("n");system("pause");int Delete_a_act(Activity acti,int n) /按照活动名字查找,删除一条活动记录char s20; int i=0,j;printf("请输入要删除的活动名称:"); /系统和用户的交互式问询scanf("%s",s);while(strcmp(actii.nam,s)!=0&&i<n) /查找i+;if(i=n)printf("没有该项活动信息!"); /失败信息返回return(n);for(j=i;j<n-1;j+) /删除操作strcpy(actij.number,actij+1.number);strcpy(actij.nam,actij+1.nam);actij.date=actij+1.date;printf("删除中.n");printf("删除成功!");return(n-1);void Query(Activity acti,int n) /查找并显示一项活动信息char s20;int i=0;printf("请输入要查找的活动名称:"); /交互式问询scanf("%s",s);while(strcmp(actii.nam,s)!=0&&i<n)i+;if(i=n)printf("没有该项活动记录!n");/失败信息返回return;printf("删除中.n");printf("该活动的队长为:%s;n",actii.number);printf("该项活动的日期为:%d。n",actii.date);int AddfromText(Activity acti,int n) /从文件中读入数据int i=0,num; FILE *fp; /定义文件指针 char filename20; /定义文件名 printf("请输入文件名称(如wenjian.txt):"); scanf("%s",filename); /输入文件名 if(fp=fopen(filename,"rb")=NULL) /打开文件printf("打开文件失败,请检查文件的正确性!n"); /打开失败信息 system("pause"); return(n); fscanf(fp,"%d",&num); /读入总记录量while(i<num) /循环读入数据 fscanf(fp,"%s%s%d",actin+i.number,actin+i.nam,&actin+i.date); i+; n+=num; fclose(fp); /关闭文件 printf("读取文件中.n");printf("文件读取成功!n"); printf("n"); system("pause"); return(n); void WritetoText(Activity acti,int n) /将所有记录写入文件int i=0; FILE *fp; /定义文件指针 char filename20; /定义文件名 printf("请输入文件名(如wenjian.txt):"); /输入文件名 scanf("%s",filename); if(fp=fopen(filename,"w")=NULL) /打开文件 printf("不能打开此文件,请检查文件的正确性!n"); system("pause"); return; fprintf(fp,"%dn",n); /循环写入数据 while(i<n) fprintf(fp,"%-16s%-15s%dn",actii.number,actii.nam,actii.date); i+; fclose(fp); /关闭文件printf("信息写入中.n");printf("信息写入成功!n"); /返回成功信息 int main() /主函数int n=0;for(;)switch(menu_select() /选择判断case 1:printf("nt*成员信息输入*nn"); /输入成员信息n=Input(meme,n);printf("成员信息输入成功!n");break;case 2:printf("nt*显示所有成员信息*nn"); /显示所有成员信息 Display(meme,n);break;case 3:printf("nt*按成员学号排序*nn"); Sort_by_num(meme,n); /按成员学号排序printf("排序成功!n"); printf("n"); system("pause"); break; case 4:printf("nt*删除一条成员信息*nn"); n=Delete_a_record(meme,n); /按成员姓名查找,删除一条成员信息 printf("n"); system("pause"); break; case 5:printf("nt*成员信息查询*nn"); Query_a_record(meme,n); /查找并显示一个成员的信息 printf("n"); system("pause"); break;case 6:printf("nt*从文本文档中添加成员信息*nn"); /从文本文档中添加成员信息n=Addfromtext(meme,n); printf("n");break;case 7:printf("nt*将成员信息写入文本文档*nn"); /将成员信息写入文本文档Writetotext(meme,n); /循环写入数据printf("n");break;case 8:printf("nt*活动信息输入*nn"); /活动信息输入n=Inpute_act(act,n);printf("活动信息输入成功!n");break;case 9:printf("nt*显示所有活动信息*nn"); /显示所有活动信息Display_act(act,n);break;case 10:printf("nt*删除一条活动信息*nn"); /删除一条活动记录n=Delete_a_act(act,n);printf("n");system("pause");break;case 11:printf("nt*活动信息查询*nn"); /活动信息查询并显示Query(act,n);printf("n");system("pause");case 12:printf("nt*从文本文档中读取活动信息*nn"); /从文本文档中读取活动信息n=AddfromText(act,n);printf("n");break;case 13:printf("nt*将活动信息写入文本文档*nn");WritetoText(act,n);system("pause");printf("n");break;case 0:printf("nt感谢您的使用,再见!n"); /结束程序printf("n"); system("pause");exit(0); 五、课程设计体会:课程设计是培养我们学生综合运用所学知识,发现、提出、分析和解决实际问题并且锻炼实践能力的重要环节,是对我们实际对理论的应用能力的具体训练和考察过程。做完了C语言的课程设计让我更加深刻地理解了一句话:“实践出真知“,要想学好C语言重在实践,要不断地在上机操作和程序设计中发现和找出自己的错误和不足,加深对理论知识的记忆和理解。我在此次课程设计中发现了一下不足之处:1. 对C语言的一些标准库函数不是很了解;2. 对函数的正确使用不是很熟悉;3. 对编译中出现的错误不能很好地认识和改正,走了不少弯路;4. 对程序的输入不是很准确,出现一些低级的输入错误,实属不该;5. 在开始做时感觉无从下手,原因在于对于基本知识的不熟练和编程能力的不足。虽然课程设计做完了,但是我的程序还有很多不完善的地方,尚待改进。程序设计是一个严谨而严肃的事情,这教给我以后做事一定要认真仔细,考虑周全,能够从大局着手,这一点对我来说是受用终生的。我会珍惜这次难得的实践机会并且从中得到快乐。