C语言学生证管理系统课程设计报告.doc_第1页
C语言学生证管理系统课程设计报告.doc_第2页
C语言学生证管理系统课程设计报告.doc_第3页
C语言学生证管理系统课程设计报告.doc_第4页
C语言学生证管理系统课程设计报告.doc_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

67C语言学生证管理系统课程设计报告1.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握C语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的基本规范;能灵活应用,初步具备运用C程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的C程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) C语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述 2.21题目描述:请设计一个学生证管理的程序,以方便辅导员对学生证的管理,该程序应该具有以下功能:(1)能从键盘输入某位学生的学生证信息(学生证应该包含的信息可以参考自己的学生证)。(2)给定学号,显示该学生的学生证信息。(3)给定班号,显示该班所有学生的学生证信息。(4)给定学号,修改该学生的学生证信息。(5)给定学号,删除该学生的学生证信息。2.22题目要求:(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。(2)学生证应该包含的信息参考自己的学生证。(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。 2.23输入要求: (1)应用程序运行后在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。程序根据用户输入的信息完成相应的处理,实现要求的功能。 (2)能对输入的数据进行简单的校验,例如,学生的入学时间必须是一个合法的日期格式,学号是唯一的(一个学号对应一条学生证信息)。2.24输出要求: (1)应用程序运行后,要在屏幕上显示一个菜单。 (2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。(3)在程序完成处理后,要清楚地给出程序的处理结果。例如,在给定学号删除学生证信息时,如果该学生不存在,要提示没能删除,如果删除成功要提示删除成功。2.25实现要求: (1)在程序中使用链表存储学生证信息。 (2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。2.26提示: (1)使用结构体表示学生证信息,一个结点保存一条学生证信息。 2.27扩展功能: (1)提供一些统计功能。例如统计每个班学生的人数,统计男女生比例。 (2)学生证信息从文件读入。 (3)将学生证信息保存到文件中。2.3运行环境1) WindowsXP/7系统2) VC+6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计本系统的功能模块如图1所示,主要有以下模块:图示:系统功能模块图退出系统保存到指定文件显示班级人数及男女比例删除指定学号学生信息按班级查询学生信息按学号查询学生信息显示文件中所有学生信息输入学生信息读入文件显示文件信息主菜单欢迎界面3.2系统模块设计1) 系统欢迎界面:构造函数void welcome(),实现欢迎使用学生证管理系统的显示。2) 主菜单界面:构造函数int showmenu(),实现系统主菜单的显示。3) 读取文件:构造函数int read(),void show(),输入需要读入文件的路径,之后显示学生证信息。4) 输入学生的信息:构造函数void input(),实现输入学生的信息。5) 显示所有学生信息:构造函数void list_student(),实现对所有学生信息的显示。6) 根据学号查询学生证信息:构造查找函数void searchnum(),查找与输入的学号相同的学生。7) 根据班号查询学生证信息:构造修改函数void searchcl()查找与输入的学号相同的学生。8) 删除学生证信息:构造删除函数void delet(),并通过对学号比较函数strcmp的调用,实现相应的学生证信息(学号、姓名、班级、性别、家庭住址、联系电话)的删除。9) 判断日期是否合法:void judge。10) 给定班号,可知班级男女比例及人数,void Tamount(char s)。11) 保存学生证信息:构造函数int save(),通过输入文件路径,将学生证信息保存入文件中。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:项目数据类型数据长度学号字符串15姓名字符串24性别字符串2出生日期字符串8专业班级字符串10家庭住址字符串100联系电话字符串20Email字符串25为了能实现系统的优越性和c语言的精华采用链表的建立学生证信息,示意图如下。 学生证信息1学生证信息22通讯录信息1221学生证信息3学生证信息4为此,先声明一个类型为struct student 的结构体,其成员为学生证信息。然后通过对指针、链表、文件等数据结构的操作,实现对学生信息的录入,存盘,查询,浏览,删除,保存等一系列操作。其中,结构体定义如下:typedef struct info /*定义结构体格式*/char num15;char class110;char name24;int age;char sex;DATE birthday;char address100;char phonenum20;char Email25;struct info *next;INFO; 为了实现程序的功能,还要定义一个日期的结构体,用于存放系统时间,具体定义如下:时间结构体:typedef struct date /*学生信息结构体*/int year; /*结构体成员*/int month;int day;DATE; /*结构体变量*/4.2模块接口设计1) 所有函数模块声明如下:/*函数声明部分*/*1.函数声明*/void welcome();/*显示欢迎界面*/void input();/*输入*/int showmenu(); /*显示菜单*/ int read(); /*读入文件*/ void show(); /*显示文件内容*/ void searchnum(); /*根据班号查找学生证信息*/ void searchcl(); /*根据班号查找学生证信息*/ void delet(); /*删除指定学生证信息*/ int save(); /*保存所操作的内容到文件中*/ void judge(char *b);/*判断日期是否合法*/void Tamount(char s);/*显示班级人数及男女比例*/void list_student();/*显示所有学生证信息*/2) 并定义一个全局变量以及结构体指针:结构体指针:struct student *head=NULL3) 主要模块的实现系统以主函数int main()为入口,首先调用void welcome()函数,显示系统欢迎界面。然后调用void shoemenu()函数,显示主菜单界面。其次调用void read()函数,从文件读入职工考勤信息。最后调用void input()函数,使系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。4.3 以下是几个主要模块的流程图:1) 文件读入学生证信息并打印函数:打印主菜单单输出文件内容返回主菜单界面打开文件图2 文件读入信息流程图2) 主菜单函数: 否打印主菜单接收用户选项是否合法调用对应选项函数进入下一级菜单退出系统是否是是否为0图3 主菜单函数流程图3) 学生证信息录入函数:输入学号否判断是否合法是学生信息录入按任意键返回主菜单4) 显示所有学生证信息函数:输入学号等否判断是否合法是显示所有学生证考勤信息按任意键返回主菜单图5显示所有学生信息函数流程图5) 查找学生信息函数:输入学号否是否正确是是输出学生信息6)同理输入班号,查找学生信息7) 删 除 学 生 信 息 函 数:指定学号的学生证信息的删除按任意键返回主菜单输入学号否是否正确是否是否删除是显示学生信息图 删除指定学号的学生证信息8) 显示班级人数及男女比例输入班级是否存在显示班级人数及男女比例返回主菜单9)删除学生信息函数:指定学号的学生证信息的删除按任意键返回主菜单输入学号否是否正确是否是否删除是显示学生信息图8 删除指定学号的学生证信息10)保存学生证信息函数:0判断全局变量lag的值1否判断数据库中是否有学生信息是按任意键返回主菜单将学生证信息写入文件信息保存完毕关闭文件判断文件路径是否正确是否数据库中是没有学生信息、数据库中学生证信息无法保存图9保存学生证信息5.运行结果5.1欢迎界面:5.2 主 菜 单5.3 输入文件路径 内 容 显 示5.4 输入学生信息5.5显示所有学生证信息5.6 按学号查询5.7按班号查询5.8删除学生信息5.9显示指定班级人数及男女比例5.10保存文件6.课程设计总结:经过了为期半学期的C语言学习,我对C语言的认识由懵懂无知到全部掌握。一方面是因为老师的精心辅导及教学,一方面是我自己的认真学习。正如谭浩强教授所编译的C语言教材中说的一样,C语言作为国际上广泛运用的计算机高级语言,既可以用来编写系统软件,也可以用来编写应用软件。C语言简洁、紧凑、使用方便、灵活。运算符丰富,数据类型丰富,具有现代语言的各种数据结构。具有结构化的控制语句,语法限制不太严格,程序设计自由度大。特别是经过了老师的指导,我觉得C语言根本不是很难,难的是我们好好学习,认真复习。正如陈宇峰老师所说的一样,只要你把C语言课本上的程序认真的敲到界面上,那么C语言对大家来说,就没有什么难度了。所以,只要我们树立正确的学习态度,努力学习,就能征服C语言,那么课设也就轻而易举了。7.程序源代码/*程序中用到的头文件及预处理命令宏定义*/#include#include#include/*程序中用到的结构体*/typedef struct date /*学生信息结构体*/int year; /*结构体成员*/int month;int day;DATE; /*结构体变量*/typedef struct info /*定义结构体格式*/char num15;char class110;char name24;int age;char sex;DATE birthday;char address100;char phonenum20;char Email25;struct info *next;INFO;/*函数声明部分*/*1.函数声明*/void welcome();void input();int showmenu(); int read(); void show(); void searchnum(); void searchcl(); void delet(); int save(); void judge(char *b);void Tamount(char s);void list_student();INFO *head=NULL; /*结构体指针 地址为空*/int amount=0;float ratio=0;int main() /*主函数*/welcome(); /*引用*/printf(n请按任意键继续.);getch();system(cls); /*否则,调用数据错误*/showmenu();return 0; void welcome() /*欢迎界面显示*/printf(nnnntttt*n);printf(tttt* * * * * * * * * * * * * * * * * * * * * * * * * * n);printf(tttt* * * * * * * * * * * * * * * * * * * * * * * * * * n);printf(tttt* * tttttt* *n);printf(tttt* * tttttt* *n);printf(tttt* * 欢 迎 使 用 学 生 证 管 理 系 统 * *n);printf(tttt* * tttttt* *n);printf(tttt* * tttttt* *n);printf(tttt* * tttttt* *n);printf(tttt* * tt指导老师: 陈利tt* *n); printf(tttt* * tttttt* *n);printf(tttt* * tt制作人:程源文ttt* *n);printf(tttt* * tt 班级:T1423-10tt* *n);printf(tttt* * tt 电话:64330ttt* *n);printf(tttt* * tttttt* *n);printf(tttt* * * * * * * * * * * * * * * * * * * * * * * * * *n);printf(tttt* * * * * * 请 按 任 意 键 进 入 系 统 * * * * * *n);printf(tttt*n);getch();system(cls);/*2.菜单函数声明*/int showmenu()int select;char ch=Y,c; /*ch字符变量,初值为Y,C未赋初值*/char sclass10;while(ch=Y|ch=y)system(cls);printf(nnnnnnn*菜单*n);printf(tttt1.读入文件n);printf(tttt2.输入学生信息n);printf(tttt3.显示文件中所有学生信息n);printf(tttt4.按学号查询学生信息n);printf(tttt5.按班级查询学生信息n);printf(tttt6.删除指定学号学生信息n);printf(tttt7.显示班级人数及男女比例n);printf(tttt8.保存到指定文件n);printf(tttt0.退出n);printf(*n);printf(n请输入程序代码:);while(1) /*直到正确为止,循环*/rewind(stdin); scanf(%d,&select); /*输入选择*/c=getchar(); /*选择赋给c*/printf(%c,c); if(select8)|(c!=n) /*不是这些的话,提示错误*/ printf(n输入错误,请重新输入:); else break;switch(select) /*程序运行选择*/case 1:read();show();break;case 2:input();break;case 3: system(cls);list_student();break;/*显示文件中所有学生信息*/case 4:searchnum();break;case 5:searchcl();break;case 6:delet();break;case 7:printf(input pararmsn);scanf(%s,sclass); Tamount(sclass);break;case 8:save();break;case 0:return 0;printf(n是否返回主菜单界面(Y/N):);rewind(stdin);ch=getchar();return 0;int read()FILE *fp; /*文件指针fp,指针类型FILE*/INFO *temp,*p,*q;/*3个指针*/char filename20;system(cls);printf(nn请输入需要读入文件的路径:);rewind(stdin);gets(filename);if(fp=fopen(filename,r)=NULL) /*只能读入,不能写入 文件不存在或路径不正确*/printf(n文件建立错误!n);return 0;p=head; /*指针之间相互赋值*/while(p!=NULL)q=p;p=p-next;free(q);head=NULL;while(!feof(fp) /*检查文件是否读取结束,结束,非0*/temp=(INFO *)malloc(sizeof(INFO);/*申请储存单元*/ fscanf(fp,%sn,temp-num);/*scanf,从键盘输入,fscanf,从文件输入,文件呈现*/ fscanf(fp,%sn,temp-class1); /*指针指向结点*/ fscanf(fp,%sn,temp-name); fscanf(fp,%dn,&temp-age); fscanf(fp,%cn,&temp-sex); fscanf(fp,%d-%d-%dn,&temp-birthday.year,&temp-birthday.month,&temp-birthday.day); fscanf(fp,%sn,temp-address); fscanf(fp,%sn,temp-phonenum); fscanf(fp,%sn,temp-Email); if(head=NULL) head=temp; temp-next=NULL; else temp-next=head; head=temp;fclose(fp);return 0;void show()INFO *p;system(cls);p=head;printf(学号 班级 姓名 年龄 性别 出生日期 电话 地址 Email n);while(p!=NULL)printf(%s ,p-num);printf(%s ,p-class1); printf(%s ,p-name); printf(%d ,p-age); printf(%c ,p-sex);printf(%d-%d-%d ,p-birthday.year,p-birthday.month,p-birthday.day); printf(%s ,p-address); printf(%s ,p-phonenum); printf(%s n,p-Email);p=p-next;return ;void input() INFO *p; /*p指针指向结构体INFO*/char b11;/*出生日期*/int y,m,d,temp;system(cls);p=(INFO *)malloc(sizeof(INFO);/*申请储存单元,单元强制转换为指针,指针赋给p*/if(head=NULL) /*文件有内容,头结点就不为空*/head=p;/*head装的是第一个date,创建第一个结点,为空*/p-next=NULL;elsep-next=head;head=p;printf(nn请输入学生的信息n);printf(n学号:);scanf(%s,p-num); printf(n班级:);scanf(%s,p-class1); printf(n姓名:);scanf(%s,p-name); printf(n年龄:);while(1)rewind(stdin); scanf(%d,&temp);if(temp100)printf(n年龄输入不合法,请重新输入:); continue;else p-age=temp;break; printf(n性别(f/m):);while(1)rewind(stdin); scanf(%c,&p-sex);if(p-sex!=f&p-sex!=Y&p-sex!=M&p-sex!=m)printf(n性别输入不合法,请重新输入:);continue;elsebreak;printf(n出生日期(格式为:YYYY-MM-DD):);rewind(stdin); judge(b);y=(b0-48)*1000+(b1-48)*100+(b2-48)*10+(b3-48);p-birthday.year=y;m=(b5-48)*10+(b6-48);p-birthday.month=m;d=(b8-48)*10+(b9-48);p-birthday.day=d; printf(n地址:);scanf(%s,p-address);printf(n电话:);scanf(%s,p-phonenum); printf(nEmail:);scanf(%s,p-Email);void list_student()INFO *p;system(cls);p=head;printf(学号 班级 姓名 年龄 性别 出生日期 电话 地址 Email n);while(p!=NULL)printf(%s ,p-num);printf(%s ,p-class1); printf(%s ,p-name); printf(%d ,p-age); printf(%c ,p-sex);printf(%d-%d-%d ,p-birthday.year,p-birthday.month,p-birthday.day); printf(%s ,p-address); printf(%s ,p-phonenum); printf(%s n,p-Email);p=p-next;return ;void searchnum()INFO *p;char num20;int flag=0; /*判断找到没有*/system(cls); printf(nn请输入需要查找的学生的学号:);rewind(stdin);gets(num);p=head;while(p!=NULL)if(strcmp(p-num,num)=0) /*学号一样为0*/printf(n找到该学生,其基本信息为:n); printf(n学号:%s,p-num); printf(n班级:%s,p-class1); printf(n姓名:%s,p-name); printf(n年龄:%d,p-age); printf(n性别:%c,p-sex); printf(n出生日期:%d-%d-%d,p-birthday.year,p-birthday.month,p-birthday.day); printf(n地址:%s,p-address); printf(n电话:%s,p-phonenum); printf(nEmail:%s,p-Email);flag=1;break;elsep=p-next;/*第二个结点*/if(flag=0)printf(n该学生不存在,请确认学号是否输入正确!n);return ;void searchcl()INFO *p;char cl20;int flag=0; system(cls); printf(nn请输入需要查找的学生的班级:);rewind(stdin);gets(cl);p=head;while(p!=NULL)if(strcmp(p-class1,cl)=0)printf(n找到此班学生,其基本信息为:n); printf(班级:%sn,p-class1); printf(学号:%sn,p-num); printf(姓名:%sn,p-name); printf(年龄:%dn,p-age); printf(性别:%cn,p-sex); printf(出生日期:%d-%d-%dn,p-birthday.year,p-birthday.month,p-birthday.day); printf(地址:%sn,p-address); printf(电话:%sn,p-phonenum); printf(Email:%sn,p-Email); flag=1;break;elsep=p-next;if(flag=0)printf(nn该班级不存在,请确认班级是否输入正确!n);return ;void delet()INFO *p,*q;int flag=0;char num115,ch;p=head;system(cls);printf(nn请输入需要删除学生信息的学号:);rewind(stdin);gets(num1);while(p!=NULL)q=p;p=p-next;if(strcmp(head-num,num1)=0)head=p;flag=1;break;if(strcmp(p-num,num1)=0)q-next=p-next;flag=1;break;if(flag=0)printf(nn该学号的学生信息不存在!n);elseprintf(n找到此班学生,其基本信息为:n); printf(班级:%sn,p-class1); printf(学号:%sn,p-num); printf(姓名:%sn,p-name); printf(年龄:%dn,p-age); printf(性别:%cn,p-sex); printf(出生日期:%d-%d-%dn,p-birthday.year,p-birthday.month,p-birthday.day); printf(地址:%sn,p-address); printf(电话:%sn,p-phonenum); printf(Email:%sn,p-Email);printf(n是否确认删除此条信息);rewind(stdin);ch=getchar();if(ch=y|ch=Y)free(p);printf(nn该学号的学生信息已经删除!n);void judge(char *b)int y,m,d,n; while(1)rewind(stdin);gets(b);if(strlen(b)=10&b4=-&b7=-)y=(b0-48)*1000+(b1-48)*100+(b2-48)*10+(b3-48);m=(b5-48)*10+(b6-48);d=(b8-48)*10+(b9-48);elseprintf(n日期格式不合法,请输入正确格式的日期:);continue;if(y0|m12)printf(n日期输入不合法,请输入正确的日期:);continue;else if(y%4=0&y&100!=0|y%400=0) n=29;elsen=28;if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)&(d31)printf(n日期输入不合法,请输入正确的日期:); else if(m=4|m=6|m=9|m=11)&(d30)printf(n日期输入不合法,请输入正确的日期:);else if(m=2&(dn)printf(n日期输入不合法,请输入正确的日期:);elsebreak;void Tamount(char s)INFO *p;int man=0,woman=0;amount=0;for(p=head;p!=NULL;p=p-next)if

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论