c语言实现机票管理系统源代码(共9篇)
c语言实现机票管理系统源代码 篇1
#include //包含access函数的头文件 #include //定义最多的航班数 #define PRINT “%dtt%stt%stt星”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count //宏定义输出格式 struct air { int num; char start[20];char over[20];char time[10];int count; }s[N]; int i,a,m=0;char ii[10];//定义结构体数组 //定义航班号 //航班起始站 //终点站 //飞行时间 //机票数量 期%stt%dn //定义全局变量 void add();//函数声明增加航班信息函数 void print(); //显示航班信息 void search();//查找航班信息 void dingpiao();//订票业务 void tuipiao();//退票 void read();//读取文件 void save();//保存文件 void output();//输出格式 void paixu();//航班排序 void chushihua();//系统初始化 void build();//建立数据文件 void paixu1();//按航班号从小到大排序 void paixu2();//从大到小 int head();//进入订票系统 int main()//主函数 { int j; system(“color b0”);chushihua();//系统初始化判断是否存在原始数据文件 system(“cls”); head();//打印出系统主界面 system(“cls”);do { printf(“================================== ”); printf(“1.增加航班信息n” “t2.浏览航班信息n” “tt3.查找航班信息(按航班号)ttn” “ttt4.航班排序(按航班号)n” “tttt5.订票业务n” “ttttt6.退票业务n” “tttttt0.退出n”);printf(“================================== ”); printf(“请在0-6中选择以回车键结束: ”);scanf(“%d”,&j);switch(j){ } case 1: add();system(“cls”); break; //调用增加航班函数 case 2:print();system(“cls”);//调用显示模块 break;case 3:search();system(“cls”);//调用查找模块 break;case 4:paixu();system(“cls”);//调用排序函数 break;case 5:dingpiao();system(“cls”);break; //调用订票模块 case 6:tuipiao();system(“cls”);//调用退票模块 break; case 0: //退出系统 save();system(“cls”); printf(“nnnttttnnt谢谢使用,再见!”); printf(“nnnnnnnnnnnnn”); break;} }while(j!=0);//判断是否调用其他函数 void chushihua()//定义系统初始化函数 { if(access(“hangban.dat”,0)){ build();} else read();} void build(){ //定义建立数据文件函数 FILE *fp;//定义文件指针 if((fp=fopen(“hangban.dat”,“wb”))==NULL){ //打开文件并判定是否出错 printf(“创建文件失败!”);//打印出错提示 getchar();return;} printf(“请依次输入航班信息(以回车键结束):n”); //打印提示信息 printf(“------------n”);for(i=0;i printf(“请输入航班号: ”); scanf(“%d”,&s[i].num);//输入航班号 printf(“请输入起始站: ”);scanf(“%s”,s[i].start);//输入起始站 printf(“请输入终点站: ”);scanf(“%s”,s[i].over);//输入终点站 printf(“请输入时间(星期几): ”);scanf(“%s”,s[i].time);//输入时间 printf(“请输入机票数: ”);scanf(“%d”,&s[i].count);//输入机票数 fwrite(&s[i],sizeof(struct air),1,fp);m++;printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”);scanf(“%s”,ii);if(strcmp(ii,“y”)!=0)//判断是否继续添加航班信息 { fclose(fp); //关闭文件 return;} } } void read() //定义读取文件函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){ } printf(“创建文件失败!”);getchar();return;} i=0;while(!feof(fp)){ fread(&s[i],sizeof(struct air),1,fp); i++;m++;//计算存在航班数 } m--;fclose(fp);printf(“请稍候,正在初始化”);for(a=0;a<3;a++){ printf(“.”); Sleep(600);} printf(“n”); //逐块读取数据 void save()//定义保存函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL) { printf(“创建文件失败!”);getchar();return;} for(i=0;i //逐块保存数据 fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);printf(“正在保存数据并退出”);for(a=0;a<3;a++) } { printf(“.”); Sleep(600);} printf(“n”);printf(“n”);void add(){ do{ 息 //定义增加航班信息函数 printf(“请依次输入您要增加的航班信息(以回车键结束): n”); //打印提示信printf(“------------n”); printf(“请输入航班号: ”); scanf(“%d”,&s[m].num);//读取航班号 printf(“请输入起始站: ”);scanf(“%s”,s[m].start);//读取起始站 printf(“请输入终点站: ”);scanf(“%s”,s[m].over);//读取终点站 printf(“请输入时间(星期几): ”);scanf(“%s”,s[m].time);//读取时间 printf(“请输入机票数: ”);scanf(“%d”,&s[m].count);//读取机票数 m++; printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”); scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判断是否继续添加 printf(“正在保存,请稍候”);for(a=0;a<5;a++) { printf(“.”); Sleep(600); } printf(“n”);} void output()//定义输出格式函数 { printf(“航班号tt起始站tt终点站tt时间tt机票数n”);//信息标题 for(i=0;i } printf(PRINT);//打印出信息 void print()//定义显示航班信息函数 { printf(“正在加载,请稍候”); for(a=0;a<5;a++) { printf(“.”); Sleep(400); } printf(“n”); system(“cls”);printf(“n目前我们有如下航班:nn”);output(); //调用输出格式函数 printf(“n请按回车键返回上层菜单 ”);getchar();getchar();} void search()//定义查询函数 { int n; do { printf(“n请输入航班号: ”); scanf(“%d”,&n);//输入查询的航班号 printf(“正在查询”); for(a=0;a<5;a++) { printf(“.”); Sleep(400); } printf(“n”); for(i=0;i { if(s[i].num==n)//按航班号判定输出条件 { printf(“n您所查找的航班信息为:n ”); printf(“航班号tt起始站tt终点站tt时间tt机票数 nn”); printf(PRINT);//显示信息 printf(“n查询完毕,按回车键继续”); getchar(); getchar(); return; } } printf(“n对不起,没有您需要的信息!n ”);printf(“是否重新查找?请键入y或n以回车键结束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找 } void dingpiao()//定义订票业务函数 { int n,x;char a[10]=“y”;do { search();//调用查询模块 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能订票。n”);所需航班 printf(“n请按回车键返回上层菜单 ”); getchar(); getchar(); strcpy(ii,“n”); break; } do { printf(“请输入您要订的机票数(以回车键结束): ”); scanf(“%d”,&n);//输入所订机票数 printf(“请稍候,正在订票”); for(x=0;x<3;x++) { printf(“.”); Sleep(600); } printf(“n”); if(n<=0) //判定机票数是否出错 //未查找到 { printf(“输入错误!至少需订1张机票。n”);} else if(s[i].count==0)//判定机票是否售完 { } printf(“对不起,你所选择的航班的机票已售完!n”);break;else if(s[i].count!=0&&s[i].count>=n)//判定机票数是否大于等于订票数 { s[i].count=s[i].count-n;printf(“订票成功!”);break;} else if(s[i].count printf(“对不起,你所选择的航班只剩 %d张机票n”, s[i].count); printf(“是否需要重新输入机票数?n请输入y或n以回车键结束: ”);//判定是否重新输入订票数 scanf(“%s”,a); } printf(“请稍候,正在订票”); for(x=0;x<3;x++) { printf(“.”); Sleep(600); } printf(“n”); } }while(!strcmp(a,“y”));printf(“是否需要订其他航班的机票?n请输入y或n以回车键结束: ”);scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否继续订票 void tuipiao()//定义退票函数 { int n,x;char a[10];do { search();//调用查询函数 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能退票。n”);printf(“n请按回车键返回上层菜单 ”);getchar();getchar();strcpy(ii,“n”);break;} printf(“请输入您要退的机票数目: ”);scanf(“%d”,&n); //输入所退票数 printf(“请稍候,正在退票”);for(x=0;x<3;x++){ printf(“.”); Sleep(600);} printf(“n”);if(n<=0) //判定票数是否有效 printf(“输入错误!至少需退1张机票。”);else { s[i].count=s[i].count+n;printf(“退票成功!”);} printf(“是否继续? 请键入y或n以回车键结束: ”);scanf(“%s”,a); //判定是否继续退票 }while(!strcmp(a,“y”));//判定并跳出循环 } void paixu()//定义排序函数 { int n; printf(“n******************************************************************************** ”); printf(“1.按航班号从小到大排序n” “t2.按航班号从大到小排序n”);printf(“******************************************************************************** ”); printf(“请在1-2中选择以回车键结束: ”);scanf(“%d”,&n);//输入排序方式 switch(n){ case 1:paixu1();//调用从小到大排序函数 break; case 2:paixu2();//调用从大到小排序函数 break;} printf(“排序后的航班信息为:n”);output(); //显示排序后航班信息 printf(“n请按回车键返回上层菜单 ”); getchar();getchar();/*for(a=0;a<5;a++) { printf(“.”); Sleep(400); } printf(“n”);*/ } void paixu1()//定义从小到大排序函数 { int k,j;struct air t;for(i=0;i { k=i; for(j=i+1;j if(s[k].num>s[j].num) k=j; if(i!=k) { t=s[k]; s[k]=s[i]; s[i]=t; } } printf(“正在排序,请稍后”); for(a=0;a<5;a++) { printf(“.”); Sleep(400); } printf(“n”);} void paixu2()//定义从大到小排序函数 { int k,j;struct air t;for(i=0;i k=i; for(j=i+1;j if(s[k].num k=j; if(i!=k) { t=s[k]; s[k]=s[i]; s[i]=t; } } printf(“正在排序,请稍后”); for(a=0;a<5;a++){ printf(“.”); Sleep(400);} printf(“n”);} int head() //进入订票系统 { printf(“===================n”);printf(“* *n”); printf(“* 欢迎使用机票订票管理系统 *n”);printf(“* *n”);printf(“* 此处可以适当的加点文字 *n”);printf(“* *n”);printf(“===================n”);printf(“请按回车键进入界面”);getchar();printf(“正在进入系统选项”);for(a=0;a<3;a++){ printf(“.”);Sleep(600); } } printf(“n”);return 0; 1 用户注册 总界面 (如图1所示) 上选择2, 即可进行用户注册。输入新用户的用户名按回车显示注册成功。如图2所示。 实现用户注册的关键思路如下: (1) 如果登录信息文件不存在, 创建一个; (2) 输入用户注册名; (3) 检验该用户名是否被别的用户占用, 如果占用, 回到 (2) , 否则 (4) ; (4) 创建该用户的用户文件, 用于管理该用户的文件。 2 用户登录 总界面 (如图1所示) 上选择1, 即可进行用户登录。输入用户名按回车以后, 显示该用户有哪些文件, 以及对文件能实现哪些操作。如图3所示。 实现用户登录的关键思路如下: (1) 输入用户登录的用户名; (2) 从登录信息文件中查找是否有该用户, 如果没有转 (1) , 否则转 (3) ; (3) 登录成功, 并显示该用户的所有文件, 以及对文件能进行的操作。 3 对文件实现的操作 用户对文件能进行创建、删除、打开、读取和写入操作。 在图3中输入1, 选择了创建文件的操作, 输入create>用户名, 即可创建文件。如图4所示, 输入create>filea即创建了文件filea。 创建文件的关键思路如下: (1) 输入需要创建的文件名; (2) 如果该文件名存在, 转到 (2) , 否则转 (3) ; (3) 将该文件信息 (文件名和文件长度) 写入该用户的用户文件中。 在图3中输入3, 选择了创建打开文件的操作, 输入open>文件名, 即可以记事本的方式打开文件。 在图3中输入5, 选择了向文件写入信息的操作, 输入write>文件名, 即可将信息写入文件。如图5所示, 有两种写入方式:覆盖原文件和在原文件末尾写入。 文件写入信息的关键思路如下: (1) 输入文件名; (2) 检验文件名是否存在, 如果不存在转 (1) , 否则转 (3) ; (3) 选择写入方式; (4) 将文件内容写入文件的磁盘位置中, 将文件长度写入用户文件中。 在图3中输入4, 选择了读取文件内容的操作, 输入read>文件名, 即可将文件内容读出。如图6所示。 读取文件的关键思路如下: (1) 输入文件名; (2) 检验文件名是否存在, 如果不存在转 (1) , 否则转 (3) ; (3) 将该文件信息逐一输出到终端。 4 结语 本文只是实现了用户注册登录后操作文件系统的基本功能、高级功能, 如显示文件信息、修改文件执行权限等, 以后有待实现。 参考文献 [1]杨章伟.21天学通C语言 (第二版) [M].北京:电子工业出版社, 2011. [2]陆丽娜.计算机操作系统[M].北京:高等教育出版社, 2012. 关键词 ASP系统;作业批改;TC调用;数据统计 中图分类号G434 文献标识码A文章编号1673-9671-(2009)112-0056-02 随着信息技术的高速发展,计算机的应用越来越普及和广泛,所以目前社会上各个学校提交作业的形式也由原来的手工誊写改革成了上交电子文档,但是目前学校作业管理一般都采用以下两种方法: 1)将作业存在U盘、光盘等介质上。 2)存放到教师电脑上的一个共享目录内。 用前一种方法作业收缴麻烦、不便管理;第二种方法要好一些,但学生可以随意查看、更改作业,老师在帮学生修改作业时,也很容易搞乱哪些是改过,哪些没改过;这些都使教师对学生作业的管理产生很大的麻烦。 这就必然要求有更好方法来实现对作业的管理,我的C语言网上作业系统就在这样的情况下应孕而生了。它的应用不仅是在C语言这一门课程中。在现代化教育技术模式下,计算机在学校已相当普及。在这样的环境下,许多学校对学生的部分作业提出了更高要求,例如要求学生作业能够长期保存到计算机中以利于学校将来教学的重复利用等等,就要求教师能够在任何联网的计算机上进行在线作业的布置、批改、成绩统计、成绩浏览等,要求学生能够查询自己上交的作业,其它相关人员也可以利用计算机通过互联网对学生作业情况进行了解与查询。这是未来教育发展的趋势,也确实是一个行之有效的办法,值得去推广。 本文的创新之处有以下两个方面: 1)实现普通作业管理之外,对某个学生的全部作业的平均分以及对某一次作业全部学生的平均分进行了适当的统计,以此来掌握学生的学习情况,教师就可根据数据进行分析适当调整授课速度和难度。 2)对学生上交C语言程序直接在线运行,查看程序结果,直接根据程序结果给学生评分,避免书面程序作业批改时的错误。 1系统概述 本系统采用B/S模式建立C语言网上作业系统,主要目的是能提供给学生提交作业、教师在线批改作业的网络环境。 1)学生能完成在线注册,查看作业,提交作业,浏览、修改、删除、上传、下载作业,更主要的学生自己能随时统计自己作业提交的次数,成绩的总分及平均分,从而能快捷有效地调整自己某一阶段的学习步伐。 2)教师能在线布置作业、批改作业(直接调试运行学生C语言原程序,得到结果),可以对学生的成绩进行阶段性的统计,查看学生留言及在线回答学生的提问等。 2可行性分析 在设计该系统的初期,我作了大量的调查和规划工作,对该系统的开发可行性作了细致全面的分析,主要是从以下三个方面来分析的。 2.1技术可行性 本系统采用的是B/S模式,开发工具使用ASP和Dreamweaver MX,数据库使用SQL Server 2000,所以开发技术比较成熟,基本排除了开发工具操作和使用上的困难。但是开发本系统最主要需要解决的技术困难是:教师在批改学生提交C语言原程序时,能在系统中直接调用TC调试工具。 2.2经济可行性 这个C语言网上作业系统,是适用于大中专院校,在硬件要求上只需提供一台Web服务器,开支和花费并不大,所以从经济上分析开发该系统是完全可行的。 2.3操作可行性 该系统操作采用可视化界面,集中采用网页的形式,对普通用户来说仅需掌握一般的计算机操作知识就可,况且该系统是专门为大中专院校C语言教学而开发的,所以在该系统操作上不论是学生还是教师都应该不存在障碍。 3关键设计说明 3.1后台部分 1)本系统分为前台和后台两个主要模块,用户分为三类,分别是教师、学生、管理员,其中教师相当于普通管理员能发布作业、查看学生的作业信息等。管理员称为超级管理员,可以进行前台和后台双重管理,但是在前台和后台的管理中,为了避免登录的冲突性,在设计时分别采用session()属性和cookies()属性。 2)后台管理中涉及到公告管理、图书管理、下载管理、链接管理、用户管理、学生管理,其中用户管理包括对管理员和教师的管理。 3)该系统设置学生在注册后不允许马上登录,必须要等待管理员批准后方可登录。所以在设计学生表时,设计了字段“stu_status”默认初始值为“c”其含义是:若未被批准禁止访问。但当管理员批准后“stu_status”的值为“o”,意味着允许访问。 3.2教师批改作业管理 在实现批改作业功能时,采用分页列表形式,每页显示20条记录,并且可以罗列出全部学生提交的作业,也可单独罗列出某个学生提交的作业,对批改过的作业和未批改过的作业作出相应的标记,方便教师批改。 在这项功能中能体现本系统的一个特色:教师除了能直接批阅提交的文本作业给出成绩和批语外,还可以直接运行查看学生提交的C语言原程序。其实现的具体方法是: 1)调用run.asp程序。 <% response.write"文件下载" Dim Stream Dim Contents Dim FileName Dim FileExt Const adTypeBinary = 1 FileName =Request("FileName") FileName=replace(FileName,"works/","") if FileName = "" Then Response.Write "无效文件名." Response.End End if ' 下载这个文件 Response.Clear Response.ContentType = "application/octet-stream" Response.AddHeader "content-disposition", "attachment; filename=" & FileName Set Stream = server.CreateObject("ADODB.Stream") Stream.Type = adTypeBinary Stream.Open Stream.LoadFromFile Server.MapPath(FileName) While Not Stream.EOS Response.BinaryWrite Stream.Read(1024 * 64) Wend Stream.Close Set Stream = Nothing Response.Flush Response.End %> 2)在本地机上设置C语言的打开方式为TC。具体操作为:工具-〉文件夹选项-〉文件类型,将 *.c的文件打开方式设置为用TC。 所以当教师在点击浏览附件时系统可以自动在TC的环境下自动运行C语言原文件,这一点正好符合本系统设计的初衷,也是本系统的特色所在。 3)在线答疑。采用分页显示的列表,每页显示20条记录,主要是完成教师回答学生的疑问,所以在设计时采用论坛的形式,教师可以对学生提出的疑问使用“固顶”,从而能保证重要的消息在列表的前面。 4)数据统计。该系统的另一个创新之处是能对学生提交的作业进行成绩统计。比如可以统计学生应该提交作业的次数,以及实际提交作业的次数,成绩的平均分,还可以按学生的学号对学生进行相应的数据查询。在进行数据统计时,对数据库中的多张表进行了必要的联系,比如要查询某个学生的成绩,必须先对数据库中的student表进行查询,然后再查询answer表和readtb表(教师批改作业表),从而将answer表中的answer_id和readtb表中的read_answer_id建立联系,查询readtb表中的read_result字段(成绩字段)。 4结语 经测试,本系统很好地完成了设计之初的需要,使得教师可以在线布置作业、批改作业、对学生成绩进行统计、在线答疑;学生亦可以实现在线浏览作业、提交作业、在线疑问等功能。重要的是,老师可在任一台联网的机器上在线直接调用TC程序运行服务器端C语言作业,并调试运行得到结果,既提高了工作效率,又提高了批改的准确率。借鉴这个经验可以将本“作业系统”推广到其它程序语言的教学中去。 参考文献 [1](美)Konrad King编著(杜大鹏等译).SQL编程实用大全[M].北京:中国水利水电出版社,2003. [2] Waymire,Richard,Sawtell,Rick.Sams Teach Yourself Microsoft SQL Server 2000 in 21 Days.Macmillan Computer Pub,2002,11:1-96. [3]罗运模,王珊 等编著,周立柱审校.SQL Server 数据库系统基础[M].北京:高等教育出版社,2003. [4]光军 编著.动态网站设计编程技法[M].北京:北京航空航天大学出版社,2001. [5]邓文渊,陈蕙贞,陈俊荣 编著.ASP与网络数据库技术[M].北京:中国铁道出社,2003. [6]闫静,钟斌 等编著.Dreamweaver MX2004与ASP动态网页[M].北京:机械工业出版社,2004. [7]林盛雄,程永灵 编著.网页设计与制作[M].北京:冶金工业出版社,2003. (初级程序员 讨论版) 前言 一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。 说明 此文挡还在完善改进中,如有不足,欢迎指正。本文档主要适用于刚刚开始接触编程的初学者。 对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。 目录 代码书写规范 2 注释书写规范 3 命名规范内容代码书写规范 1.1函数定义 每个函数的定义和说明应该从第1列开始书写。函数名(包括参数表)和函数体的花括号(“{”和“}”)应该各占一行。在函数体结尾的括号(“}”)后面应该加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。 范例1:函数的声明 void matMyFunction(int n){ …… } /* matMyFunction*/ 1.2空格的使用 使用空格分割所有演算符号和操作数。 这条规则的例外是“->”,““.”, “()”和“[]”,这些操作符和操作数之间不空格。当需要把一个程序行的内容分成几行写时,操作符号应该放在行末,而不是下一行的开头。 1.3缩进的设置 代码书写应该遵从结构化的要求,采用缩进的格式。最小缩进量为4个空格,整个文件内部应该统一,不要混用Tab键和4个空格这两种情况,因为不同的编辑器对Tab键的处理方法不同。 1.4折行的使用 每行的长度不要超过80个字符,当程序行太长时,应该分行书写。分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。 分行后的缩进应该按照程序的逻辑关系进行对齐。例如:参数表折行后,下面的行应该在参数表左括号的下方。 范例2:折行的格式dwNewShape = matAffineTransform(coords, translation,rotation); if(((new_shape.x > left_border)&& (new_shape.x < right_border))&& ((new_shape.y > bottom_border)&& (new_shape.y < top_border))){ draw(new_shape);} 1.5嵌套语句(语句块)的格式 对于嵌套式的语句--即语句块(如,if、while、switch等)应该包括在花括号中。花括号的左括号应该单独占一行,并与关键字对齐。建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。 范例3:嵌套语句格式 if(value < max){ if(value!= 0) { func(value); } } } else { error(“The value is too big.”);} /* if(value < max)*/ 注释书写规范 注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。 2.1注释风格 语言中使用一组(/* … */)作为注释界定符。注释内容尽量用英语方式表述。 注释的基本样式参考范例4。 注释应该出现在要说明的内容之前,而不应该出现在其后。 除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。 范例4:几种注释样式 /* * ************************************************* 强调注释 * ************************************************ */ /* * 块注释 */ /* 单行注释 */ int i;/*行末注释*/ 2.2何时需要注释 如果变量的名字不能完全说明其用途,应该使用注释加以说明。 如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。对于一个比较长的程序段落,应该加注释予以说明。如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。 如果程序中使用了某个复杂的算法,建议注明其出处。 如果在调试中发现某段落容易出现错误,应该注明。命名规范 3.1常量、变量命名 用#define定义的符号常量全部采用大写。 变量命名的基本原则: 可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清 楚其含义。 不要使用人名、地名和汉语拼音。 如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。 多个单词组成的变量名,每个单词的首字母应该大写。如:dwUserInputValue。 3.2函数命名 //头文件 #include/*====================栈 数据结构利用数组实现====================*/#define MAX 100#define ok 1#define error 0typedef struct Stack{ int data[MAX]; int top;//栈顶 int bottom; //栈底}Stack,*STACK;//初始化栈int InitStack(STACK stack);//销毁int DestroyStack(STACK stack);//清空int ClearStack(STACK stack);//栈空int StackEmpty(STACK stack);//获取栈顶元素int GetTop(STACK stack,int* elem);//压栈int Push(STACK stack,int* elem);//出栈int Pop(STACK stack,int* elem);//返回栈中元素长度int StackLength(STACK stack,int* len);//打印栈中元素int PrintStack(STACK stack);//栈满int StackFull(STACK stack); //main函数中实现#include “stack.h”int main{ int num=10, num1, i=0,j=0; Stack stack; int initFlag=InitStack(&stack); if(!initFlag) return 0; for(num1=0;num1<10;num1++) Push(&stack,&num1);/* int pushFlag=Push(&stack,&num); if(!pushFlag) return 0;*/// ClearStack(&stack); for(;i<10;i++) { int flag=Pop(&stack,&num1); if(flag) printf(“%d ”,num1); else printf(“Pop error”); } int lenFlag=StackLength(&stack,&num1); if(lenFlag) printf(“len=%d ”,num1); else printf(“StackLength error”);/* int getFlag=GetTop(&stack,&num1); if(getFlag) printf(“%d ”,num1);*/ PrintStack(&stack); return 0;}//初始化栈int InitStack(STACK stack){ if(stack==NULL) return error; stack->bottom=stack->top=0; return ok;}//压栈int Push(STACK stack,int* elem){ int flag=StackFull(stack); if(!flag) return error; stack->data[stack->top] =*elem; ++stack->top; return ok;}//打印栈中所有元素int PrintStack(STACK stack){ int i=0; int flag=StackEmpty(stack); if(!flag) return error; for(i=0;itop;i++) { printf(“%d ”,stack->data[i]); } printf(“n”); return ok;}//栈空int StackEmpty(STACK stack){ if(stack==NULL || stack->top==stack->bottom) return error; else return ok;}//出栈int Pop(STACK stack,int* elem){ int flag=StackEmpty(stack); if(!flag) return error; *elem=stack->data[stack->top-1]; --stack->top; return ok;}//栈满int StackFull(STACK stack){ if(stack==NULL || stack->top>MAX) return error; else return ok;}//销毁int DestroyStack(STACK stack){ if(stack==NULL) return ok; else { stack->top=stack->bottom; stack=NULL; return ok; }}//清空int ClearStack(STACK stack){ int flag=StackEmpty(stack); if(!flag) return error; else { stack->top=stack->bottom; return ok; }}//获取栈顶元素int GetTop(STACK stack,int* elem){ int flag=StackEmpty(stack); if(!flag) return error; *elem=stack->data[stack->top-1]; return ok;}//返回栈中元素长度int StackLength(STACK stack,int* len){ if(stack==NULL) return error; if(stack->top==stack->bottom) { *len=0; return ok; } else { *len=stack->top; return ok; }} #include #include /*玫瑰花*/ #define FNX(x) (int)(xo+(x)*1.0) #define FNY(y) (int)(getmaxy-(yo+(y)*1.0)) #define FNX2(phi) cos(phi)*ac-sin(phi)*bs #define FNY2(phi) cos(phi)*as+sin(phi)*bc /*画旋转的椭圆*/ void elli(int xo,int yo,int a,int b,double theta) { int i; double da,c,s,ac,as,bc,bs,xf,yf,phi,x,y; theta=theta*0.01745; da=3*0.1745; c=cos(theta);s=sin(theta); ac=a*c;as=a*s;bc=b*c;bs=b*s; x=FNX2(0);y=FNY2(0); moveto(FNX(x),FNY(y)); for(i=1;i<=360;i++) { phi=i*da;xf=x*cos(phi)*0.1;yf=b*sin(phi)*0.1; x=FNX2(phi);y=FNY2(phi); lineto(FNX(x),FNY(y)); } } /*花*/ void hua(int x,int y) { register i; /*画粉红色玫瑰*/ setcolor(12); arc(x+65,y-60,150,350,8); arc(x+66,y-54,300,470,8); arc(x+65,y-56,30,230,10); arc(x+64,y-57,300,490,17); ellipse(x+73,y-30,250,450,27,40); ellipse(x+59,y-30,100,290,27,40); ellipse(x+65,y-40,140,270,20,30); setfillstyle(SOLID_FILL,5); floodfill(x+65,y-20,12); /*画红色玫瑰*/ arc(x,y,150,350,12); arc(x+1,y+8,280,470,12); arc(x,y+2,30,230,16); arc(x,y+3,80,240,28); arc(x+2,y+8,180,330,22); arc(x-2,y+2,310,460,25); ellipse(x-12,y+30,120,300,30,40); ellipse(x+10,y+28,250,423,30,42); ellipse(x-4,y+10,290,393,30,40); setfillstyle(SOLID_FILL,4); floodfill(x+5,y+31,12); /*画紫色花骨朵*/ ellipse(x+120,y+5,0,360,15,25); setfillstyle(SOLID_FILL,1); floodfill(x+120,y,12); /*画黄色花骨朵*/ ellipse(x-70,y+10,0,360,14,20); setfillstyle(SOLID_FILL,14); floodfill(x-70,y+10,12); setcolor(10); /*画红花花萼*/ ellipse(x-15,y+32,190,310,30,35); ellipse(x+16,y+32,235,355,26,35); ellipse(x,y+35,190,350,43,50); arc(x,y+82,190,350,6); setfillstyle(SOLID_FILL,2); floodfill(x,y+75,10); /*画粉花花萼*/ ellipse(x+50,y-48,190,320,22,50); ellipse(x+80,y-48,220,350,22,50); ellipse(x+65,y-28,180,360,36,50); floodfill(x+65,y+18,10); /*画主枝*/ for(i=0;i<3;i++ ) { ellipse(x-98,y+100+i,255,371,100,80); ellipse(x-20,y+30+i,260,358,140,140); ellipse(x+224,y+20+i,180,218,160,140); } /*画侧枝*/ ellipse(x+70,y+34,180,233,140,140); ellipse(x,y+40,205,255,100,120); ellipse(x+135,y-30,209,249,72,120); ellipse(x,y+20,263,301,100,120); ellipse(x+85,y-10,278,305,100,120); 新型的网络教学模式对传统的课堂教学模式提出了很大的挑战,网络教学突破了传统教学的种种局限,不受时间和空间的限制,能够充分地利用网络资源,能及时交流和答疑,以学生为中心,学生可以根据自己的具体情况制定学习计划,实现了自主学习,极大地激发了学生的学习兴趣,提高了学习效率。虽然网路教学具有很大的优势,作为辅助课堂教学的一种有效手段,还不能从真正意义上完全取代传统的课堂教学,究其原因,是因为目前网络教学中还存在着很多问题。例如,网络教学基础设施差,网速低,网络运行不稳定;网络教学资源不丰富,质量低,重复率高;网络教学系统设计不合理,不符合学生的认知规律,不能引起学生的兴趣,网络教学系统利用率低,成了一种应付检查的摆设等等。一个完善的网络教学系统是实现网络教学的关键。针对网络教学中的一些问题,提出了一个利用比较成熟的技术ASP.NET开发设计的C语言网络教学系统,该系统有关C语言课程的教学资源丰富,功能齐全,交互性强,比较实用;界面友好,操作方便;具有良好的可扩展性和可移植性。下面从系统的分析、设计和实现等方面具体阐述网络教学系统的开发过程。 2 开发过程 2.1 系统分析 《C语言程序设计》课程是很多大学的学生必修的一门课程,C语言是一种应用比较广泛的编程语言,但对刚刚接触编程的学生来说,入门比较难,学生往往容易失去兴趣。因此网络教学系统应以培养学生的兴趣为导入点,结合课程内容和学生的认知特点,以合理的教学方式为出发点进行设计。设计的系统要求功能齐全,实用性强,界面友好,操作方便,教学资源丰富,适合学生自学,交互性强,具有一定安全性和可靠性。网络教学系统的功能包括两部分:在线教学功能和在线考试功能。在线教学主要包括教学资源的上传和下载、作业管理、公告的发布和维护、在线讨论和在线答疑以及聊天等功能。在线教学分为教师的教学和学生的学习两部分,它们的用例图如图1所示。 在线考试功能包括在线考试、在线考生账户管理和在线阅卷等功能,在线考试功能中教师主要负责试卷的组织、管理和维护,能在线批阅试卷等功能。学生可以选择试卷类型,在线考试和查看自己的考试成绩等功能。在线考试功能用例图如图2所示。 2.2 系统设计 系统的设计主要从系统的体系结构、系统的功能架构两个方面来阐述系统的设计架构。首先来描述一下系统的体系结构,它采用B/S三层结构模式,以SQL Server 2005数据库作为后台数据库,基于ASP.NET技术和ADO.NET技术进行设计。 在三层结构中,最底层是数据层,数据库服务器主要负责网络教学系统中教师和学生信息、教学资源数据、作业、试题库等数据的存储、管理和维护。中间层是功能层,由Web服务器来管理,实现用户的注册、登录、资源上传和下载、作业管理和在线考试等功能。最顶层是界面层,也就是用户看到的实际页面,客户浏览器负责向Web服务器通过HTTP协议提出服务申请,Web服务器经过身份验证后,如果有数据处理的要求,Web服务器会通过SQL等方式向后台数据库发出数据处理的申请,数据库将数据处理的结果返回到Web服务器,否则Web服务器会直接通过HTTP将申请的网页返回到客户端。系统的功能架构主要实现教学资源共享、作业提交与批改、在线考试与阅卷、在线答疑、公告发布等功能,支持学生自主学习,从而把传统的学习过程变得更加方便灵活。系统的主要功能模块组织图如图3所示。 在详细设计阶段,将系统概要设计的各个功能模块进一步细化成很多子功能模块,主要通过类图、时序图对系统的功能进行详细设计。由于系统的功能比较多,只列举教学资源、作业管理和在线考试3大模块的详细设计过程。 上传及下载教学资源功能中教师可以管理C语言视频讲座、管理C语言相关电子书、管理C语言实例程序,上传及下载教学资源模块的核心类主要有管理C语言视频讲座后台功能处理类Management Video Lectures Service.cs、管理C语言相关电子书后台功能处理类Management Related Ebook Service.cs、管理C语言实例程序后台功能处理类Management Program Examples Service.cs、上传及下载教学资源后台功能处理类Teaching Resources Service.cs。 教师批阅上传后的作业,批阅作业页面reviews HomeworkForm.aspx调用reviews Homework Form.aspx.cs显示作业信息,教师在作业中添加批阅信息,填写完成后封装至聊天记录实体类Chat Logs.cs,请求保存。后台作业功能处理类HomeworkService.cs接收批阅保存请求及定义的新增数据方法保存批阅表内容。reviews Homework.aspx调用reviews Homework.aspx.cs显示批阅作业结果。 在线考试模块中,老师可以管理和维护试卷;学生可以进行答题、选择考试类型、保存试卷和查看考试成绩等。在线考试功能中主要类包括在线考试后台处理类Online Examination Service.cs、维护试卷类型后台处理类Maintenance Examination Paper Types Service.cs、维护试卷内容后台处理类Maintenance Test Paper Content Service.cs。 2.3 数据库设计 网络教学系统中有大量的数据需要存储,每个主要功能模块涉及到很多数据表,在这里仅列举几个主要表的设计。公告信息表。包括公告序号、标题、公告内容、发布时间等,如表1所示。 学生信息表。包括学生学号、姓名、专业、作业成绩等,如表2所示。 试卷信息表。试卷名称、试卷的内容、试卷的答案、试卷的分数、答题时间等,如表3所示。 2.4 系统实现 2.4.1 数据库的连接和访问 本系统使用的是SQL Server2005数据库,ASP.NET通过ADO.NET连接数据源,实现数据操作、检索和更新。SQL数据库中,访问数据库的类有Sql Connection,Sql Command,SqlData Reader,Sql Data Adapter,操作数据库的第一步是建立与数据库的连接,首先要创建Sql Connection对象,为了保证数据的完整性和正确性,每次使用完后都要将连接关闭,可以使用Sql Connection对象的close方法来实现。Sql Connection con=new Sql Connection("server=.;uid=用户名;pwd=密码;database=数据库"); 2.4.2 功能实现 进入主页后,选择对应的用户登录项,便可使用教学系统的功能。以教师登录窗口为例,在此界面只有输入正确的密码和用户名才能进入系统。其中对应的管理员、教师系统和学生系统的功能是不一样的。教师系统的功能学生是不可用的。教师登录时,首先输入用户名、密码,发送登录请求;系统接受请求,首先调用chkadmin方法进行教师身份验证,若验证用户名、密码与教书账户中的数据对应,则跳转到教师的主页面teacher.asp,在此页面显示教师能操作的各项功能,并进行操作。学生在主页面选择“在线考试”并发送考试请求后,系统接受请求进入考试系统。首先显示测试的试题信息列表,学生自主选择要参加考试的试题后,进入在线考试系统登录界面,填写好对应的姓名、考号及验证码信息后,请求“开始”,系统会自动进入在线考试界面。 3 结语 针对目前网络教学中存在的问题,结合比较先进的Web应用开发技术ASP.NET和SQL Server 2005数据库技术基于B/S结构开发了一个比较实用、功能齐全的网上教学系统。本系统经过测试,系统性能良好,运行可靠。系统设计的界面友好,操作简单,网上教学资源丰富,非常适合学习C语言的学生和C语言爱好者使用。网上教学系统是在网络环境下的一种教育的尝试。在实际的应用中还存在着一些不足的地方,如缺乏对学生的学习进程真实性的监控、还不能实现完全智能化的交互控制,还需对交互活动进行设计,以维持高水平的交互活动。但随着网络新技术涌现和教学理论研究的突破,网络教学系统也必然会不断发展及进步。 参考文献 [1]别文群,郑远强.基于Web的网络教学平台的设计与实现[J].计算机技术与发展,2007,17(8):219-222. [2]杨军,春晖,赵春光.浅谈基于Web方式的网络教学信息资源的建设[J].电化教育研究,2003,(4):59-62. [3]赵小军.基于B/S结构的网络教学系统的设计与实现[J].计算机与现代化,2010,(2):8-10. #include #include void main() { WORDwVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if( err != 0) { return; } if(LOBYTE( wsaData.wVersion ) != 1|| HIBYTE( wsaData.wVersion) != 1) { WSACleanup(); return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[100]; sprint(sendBuf,”Welcome %s to www.sunxin.org“, inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[100]; recv(sockConn,recvBuf); printf(“%sn”,recvBuf); closesocket(sockConn); WSACleanup(); } } 注:这是Server端;File->New->Win32 Console Application,工程名:TcpSrv;然后,File->New->C++ Source File,文件名:TcpSrv;在该工程的`Setting的Link的Object/library modules项要加入ws2_32.lib #include #include void main() { WORDwVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(1,1); err = WSAStartup(wVersionRequested,&wsaData); if( err != 0) { return; } if(LOBYTE( wsaData.wVersion ) != 1|| HIBYTE( wsaData.wVersion) != 1) { WSACleanup(); return; } SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=inet_addr(“127.0.0.1″); addrSrv.sin_family=AF_INET; addrSrv.sin_porthtons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); char recvBuf[100]; recv(sockClient,recvBuf,100,0); printf(“%sn”,recvBuf); send(sockClient,”This is zhangsan”,strlen(“This is zhangsan”)+1,0); closesocket(sockClient); WSACleanup(); } char tel[20]; char wu[20]; char dz[20];}mem[N];void sorttel(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c:elephone.txt”,“rb”))==NULL){ printf(“不能打开文件n”);} for(i=0;i for(j=0;j if(strcmp(mem[j+1].tel,mem[j].tel)<0) { temp=mem[j]; mem[j]=mem[j+1]; mem[j+1]=temp; } for(i=0;i void sortname(struct mem tel[]){ struct mem temp; int i,j; FILE *fp;if((fp=fopen(“c:elephone.txt”,“rb”))==NULL){ printf(“不能打开文件n”);} for(i=0;i for(j=i+1;j if(strcmp(mem[j].name,mem[i].name)<0) { temp=mem[i]; mem[i]=mem[j]; mem[j]=temp; } for(i=0;i void sor(){int k; do{printf(“--------------------排序菜单-------------------n”); printf(“------------------------n”); printf(“ 1:按号码排序n”); printf(“ 2:按姓名排序n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-2选择功能n”); scanf(“%d”,&k);getchar(); switch(k) { case 1:sorttel(mem);break; case 2:sortname(mem);break; case 0:return; } }while(1);} void add(){ char name[10];char tel[10]; char wu[10]; char dz[10];FILE *fp;if((fp=fopen(“c:elephone.txt”,“a”))==NULL){ printf(“不能打开文件n”); exit(0);} printf(“请输入姓名”); gets(name); printf(“请输入电话号码”); gets(tel); printf(“请输入工作单位”); gets(wu); printf(“请输入地址”); gets(dz);printf(“n”); fprintf(fp,“%s %s %s %sn”,name,tel,wu,dz); fclose(fp);} void del(){ FILE *fp; int i=0,n; char name[10]; printf(“请输入删除名字”); gets(name); if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)!=0)i++; } fclose(fp);if((fp=fopen(“c:elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} for(n=0;n fprintf(fp,“%s %s %s %s”,mem[n].name,mem[n].tel,mem[n].wu,mem[n].dz);fclose(fp);} void dis(){ FILE * fp;int i=0,n;printf(“ 姓名 电话号码 工作单位 地址n”); if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) {fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);i++;} fclose(fp); n=i; for(i=0;i printf(“%-8s%11s%13s%24sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz);} void mod(){ FILE * fp;int i=0,n;char name[10];char nn[10];char nt[10];char nwu[10];char ndz[10]; printf(“请输入要修改的姓名”);gets(name);printf(“请输入修改后的姓名”);gets(nn);printf(“请输入修改后的电话号码”);gets(nt);printf(“请输入修改后的工作单位”);gets(nwu);printf(“请输入修改后的地址”);gets(ndz);printf(“n”);if((fp=fopen(“c:elephone.txt”,“r”))==NULL){ printf(“不能打开文件n”); exit(0);} while(!feof(fp)) { fscanf(fp,“%s%s%s%s”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); if(strcmp(name,mem[i].name)==0) {strcpy(mem[i].name,nn);strcpy(mem[i].tel,nt);strcpy(mem[i].wu,nwu);strcpy(mem[i].dz,ndz);} i++; } fclose(fp);if((fp=fopen(“c:elephone.txt”,“w”))==NULL){ printf(“不能打开文件n”); exit(0);} n=i; for(i=0;i fprintf(fp,“%s %s %s %sn”,mem[i].name,mem[i].tel,mem[i].wu,mem[i].dz); fclose(fp);} void main(){ int choose; while(1) { printf(“--------------------电话簿管理系统--------------------n”); printf(“------------------------n”); printf(“ 1:添加一个新号码n”); printf(“ 2:删除一个号码n”); printf(“ 3:显示所有保存的号码n”); printf(“ 4:修改号码n”); printf(“ 5:排序n”); printf(“ 6:查询n”); printf(“ 0:退出n”); printf(“------------------------n”); printf(“请输入0-6选择功能n”); scanf(“%d”,&choose);getchar(); if(choose!=0) switch(choose) { case 1:add();break; case 2:del();break; case 3:dis();break; case 4:mod();break; case 5:sor();break; case 6:/*que();break*/; } else exit(0); 【c语言实现机票管理系统源代码】推荐阅读: 链表的c语言实现①06-21 用C或者C++语言实现SOCKET通信05-27 Lua 学习笔记之C API 遍历 Table实现代码11-03 c语言必背入门代码08-26 R语言实现08-15 作用及R语言实现05-23 代码实现10-31 学生信息管理系统设计与实现C11-22c语言实现机票管理系统源代码 篇2
“C语言”网上作业系统的实现 篇3
C语言 程序代码编写规范 篇4
栈的实现(C语言实现) 篇5
C语言编写实现玫瑰花 篇6
c语言实现机票管理系统源代码 篇7
c语言实现机票管理系统源代码 篇8
c语言 电话簿管理系统 篇9