C课程设计报告

合集下载

C语言课程设计报告学生成绩管理系统(广工)

C语言课程设计报告学生成绩管理系统(广工)

一、课程设计题目:学生成绩管理二、需求分析给出n个学生的m门考试的成绩表,每个学生的信息由学号、姓名、性别以及各科成绩组成。

对学生的考试成绩进行有关统计:按总数高低次序,打印出名次表,分数相同的为同一名次;按名次打印出每个学生的学号、姓名、总分以及各科成绩,并打印统计表。

三、概要设计程序要有的功能:1。

输入记录2。

用指定格式显示全部记录3。

根据姓名查找记录4。

根据姓名删除记录5. 保存记录到文件6。

按序号显示记录7。

按姓名由小到大的顺序排序程序运行当中,通过选择对应的功能序号来实现所需功能。

对输入的数据要有事先的分析,如果用户输入的数据与实际不相符如输入成绩的数值为负,则程序应输出相应的提示:“您输入的数据有误,请核实!”。

再者就是,当再输入完相应的数据后,程序作出相应的提示,询问用户是否要保存数据。

在排列学生成绩时候,如果出现成绩相同的情况,程序自动作出处理。

最后,在程序可以正确运行的基础上,再增加一些功能,如在排列的时候,自动输出最高分与最低分。

与及格成绩作比较,输出及格人数等相关信息。

流程图:四、详细设计源程序:#include ”stdio。

h”#include "stdlib.h”#include "string。

h”int shoudsave=0;/* */struct student{char num[10];/*学号*/char name[20];char sex[4];int cgrade;int mgrade;int egrade;int totle;int ave;char neartime[10];/*最近更新时间*/};typedef struct node{struct student data;struct node *next;}Node,*Link;void menu(){printf(”*********************************主菜单*****************************************”);printf(”\t1登记学生资料\t\t\t\t\t2删除学生资料\n”);printf(”\t3查询学生资料\t\t\t\t\t4修改学生资料\n”);printf(”\t5保存学生资料\t\t\t\t\t0退出系统\n”);printf(”********************************************************************************\n");}void printstart(){printf(”-————---—-——————--——----———-—-—-————--————--—--—--—-————---—-—————--———\n”);}void Wrong(){printf(”\n=====>提示:输入错误!\n”);}void Nofind(){printf("\n=====〉提示:没有找到该学生!\n");}void printc()/*本函数用于输出中文*/printf(”学号\t 姓名性别英语成绩数学成绩C语言成绩总分平均分\n”); }void printe(Node *p)/* 本函数用于输出英文*/{printf("%—12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p—〉data。

c课程设计实践报告1500字

c课程设计实践报告1500字

c 课程设计实践报告1500字一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构及算法,培养学生运用C语言进行程序设计的能力。

具体目标如下:1.知识目标:–掌握C语言的基本语法,包括数据类型、运算符、表达式、语句等;–理解函数的定义和调用,掌握函数的参数传递和返回值;–学习常用的数据结构,如数组、链表、栈和队列;–掌握基本的算法思想,如排序、查找、递归等。

2.技能目标:–能够使用C语言编写简单的程序,解决实际问题;–熟练使用C语言的调试工具,分析程序的正确性和性能;–掌握常用的编程规范和技巧,提高代码的可读性和可维护性。

3.情感态度价值观目标:–培养学生的团队合作精神,能够与他人合作完成编程任务;–培养学生的问题解决能力,面对编程难题时能够积极寻找解决方案;–培养学生的创新意识,鼓励学生进行程序设计和创新实践。

二、教学内容根据课程目标,教学内容主要包括C语言的基本语法、数据结构、算法和编程实践。

具体安排如下:1.C语言的基本语法:–数据类型、运算符和表达式;–控制语句,包括条件语句和循环语句;–函数的定义和调用,参数传递和返回值。

2.数据结构:–数组的声明和使用;–链表的创建和操作;–栈和队列的实现和应用。

–排序算法,包括冒泡排序、选择排序和插入排序;–查找算法,包括线性查找和二分查找;–递归算法的概念和应用。

3.编程实践:–简单的数学计算程序;–数据结构的实现和应用;–解决实际问题的编程案例。

三、教学方法为了达到课程目标,将采用以下教学方法:1.讲授法:通过讲解和示范,使学生掌握C语言的基本语法和数据结构;2.讨论法:学生进行小组讨论,促进学生之间的交流和合作;3.案例分析法:通过分析实际的编程案例,使学生理解算法的应用和程序设计的方法;4.实验法:安排编程实验,让学生亲自动手编写程序,培养学生的实践能力。

四、教学资源为了支持教学内容和教学方法的实施,将选择和准备以下教学资源:1.教材:选用《C程序设计语言》作为主要教材,引导学生深入学习C语言的基本语法;2.参考书:提供《C Primer Plus》等参考书籍,供学生自主学习和拓展;3.多媒体资料:制作课件和教学视频,生动展示C语言的编程方法和技巧;4.实验设备:提供计算机实验室,让学生进行编程实验和实践。

c课程设计报告范文

c课程设计报告范文

c 课程设计报告范文一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构和算法,培养学生具备基本的编程能力和逻辑思维能力。

具体分解为以下三个方面的目标:1.知识目标:学生需要掌握C语言的基本语法、数据类型、运算符、控制结构、函数、数组、指针、字符串、结构体等基本概念。

2.技能目标:学生需要能够运用C语言编写简单的程序,解决实际问题,具备基本的编程能力和问题解决能力。

3.情感态度价值观目标:培养学生对编程的兴趣,增强学生的自信心和自主学习能力,培养学生的团队合作意识和创新精神。

二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和数据类型:变量、常量、数据类型、运算符、表达式等。

2.控制结构:条件语句、循环语句、分支语句等。

3.函数:函数的定义和声明、函数的调用、参数传递、返回值等。

4.数组和指针:一维数组、多维数组、指针的概念和应用等。

5.字符串:字符串的基本操作、字符串数组、字符串指针等。

6.结构体和文件操作等高级内容:结构体的定义和使用、文件的基本操作等。

三、教学方法为了达到教学目标,本课程将采用多种教学方法,包括:1.讲授法:通过讲解和演示,使学生掌握C语言的基本语法和概念。

2.讨论法:通过小组讨论和问题解答,培养学生的思考能力和问题解决能力。

3.案例分析法:通过分析实际案例,使学生了解C语言在实际编程中的应用。

4.实验法:通过编写和调试程序,使学生掌握C语言的编程技巧和调试方法。

四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。

2.参考书:提供一些相关的参考书籍,如《C语言深度探索》、《C指针》等。

3.多媒体资料:制作课件、演示文稿等多媒体资料,以图文并茂地展示C语言的基本概念和编程技巧。

4.实验设备:提供计算机实验室,让学生能够进行编程实践和调试。

C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告(学生成绩管理系统)

C语言课程设计报告:学生成绩管理系统系统需求一、当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息。

二、学生成绩查询: 输入一个学号,在文件中查找此学生, 若找到则输出此学生的全部信息和成绩;若找不到则输出查找失败的信息。

同时也可以全部把各科的平均成绩,最高和最低分输出.三、新生插入:通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来.四、输出全部学生信息和全部学生成绩。

五、退出系统.六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。

总体设计一、仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。

2、查询模块:可用stu *lookdata(stu *p1)来实现。

找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。

3、插入模块:可用insert( )函数来实现。

其中通过学号的大小来比较的,并且以此来排序.4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage()、maverage()、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。

5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。

二、系统主模块结构图:详细设计一、界面设计此系统界面采用图形和数字化菜单设计。

主界面设计如下:学生成绩管理系统请选择相应的数字执行相应的功能:1:是否输入其他数据2:查看数据3:插入数据4:查找数据5:更新数据6:保留数据7:显示或打印数据8:语文成绩状况9:数学成绩状况10:英语成绩状况11:计算机成绩状况12:?13:退出系统二、数据结构设计:程序设计中用到的结构体类型:学生信息结构体类型:typedef struct student{char name[MAX];int num[MAX];char sex[MAX];int chinese;int mathematic;int english;int computer;struct student *next;}程序代码://原始密码是123456#include"stdio.h”#include"stddef.h"#include"stddef。

C语言程序设计课程设计报告

C语言程序设计课程设计报告

《C语言程序设计》课程设计报告(2011— 2012学年第 1 学期)专业:计算机科学与技术班级:姓名学号:指导教师:成绩:计算机科学与技术系2011 年12月31日目录一、课程设计的目的与要求 (3)二、方案实现与调试 (3)2.1 掷骰子游戏 (3)2.2 汽车加油 (6)2.3 大优惠 (8)2.4 金币 (9)2.5小型通讯录设计 (12)三、课程设计分析与总结 (14)附录程序清单 (14)一、课程设计的目的与要求(含设计指标)(1)实验目的C语言是一种编程灵活,特色鲜明的程序设计语言。

C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。

结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。

达到如下目的:1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;2.让学生扎实掌握C程序设计语言的相关知识;3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。

(2)设计要求根据实验内容的要求自由选定题目。

编写程序要求遵循如下基本要求:●模块化程序设计●锯齿型书写格式●必须上机调试通过二、方案实现与调试2.1掷骰子游戏•2.1.1 题目内容的描述两人玩骰子,游戏规则如下:1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。

2) 将每人每次的分值累加计分3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。

4) 结束条件:当双方都掷10次或经过5次后一方累计分数为另一方的两倍。

最后显示双方分数并判定优胜者。

•2.1.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型:整型数格式:srand(time(0));输入数=rand()%6+1;内容限制:产生最多十次随机数输出数据说明:掷骰子的获胜者•2.1.3主要模块的算法描述2.1.4调试过程及实验结果出现的问题:每次循环产生的随机数相同。

大学生c语言课程设计

大学生c语言课程设计

大学生c语言课程设计一、课程目标知识目标:1. 学生能理解C语言的基本语法和结构,掌握数据类型、运算符、控制语句等基本概念。

2. 学生能够运用C语言编写简单的程序,解决问题,并理解程序执行流程。

3. 学生能掌握数组、函数、指针等C语言核心知识,进行模块化编程。

技能目标:1. 学生具备使用C语言进行程序设计的能力,能够编写、调试和运行简单的C 程序。

2. 学生能够运用所学知识解决实际问题,培养编程思维和逻辑分析能力。

3. 学生通过课程项目实践,提高团队协作和沟通能力。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,认识到编程在现代社会中的重要性。

2. 学生在学习过程中,养成积极探究、自主学习的习惯,形成良好的学习态度。

3. 学生通过课程学习,认识到团队合作的重要性,培养集体荣誉感和责任感。

分析课程性质、学生特点和教学要求:本课程为大学生C语言课程设计,旨在帮助学生掌握C语言编程基础,培养编程能力和逻辑思维。

学生特点为具有一定的高等数学和计算机基础,对编程有一定兴趣,但实践经验不足。

教学要求注重理论与实践相结合,以项目驱动教学,提高学生的动手能力和实际应用能力。

课程目标分解为具体学习成果:1. 学生能够独立编写100行以上的C程序,完成课程项目。

2. 学生通过课程学习,掌握C语言基本语法和核心知识,能解决实际问题。

3. 学生在课程实践中,展示良好的团队协作和沟通能力,形成积极的情感态度。

二、教学内容本课程教学内容紧密结合课程目标,确保学生系统掌握C语言知识。

教学内容如下:1. C语言概述:介绍C语言的发展历程、特点和应用领域,使学生了解C语言的重要性。

教材章节:第1章 C语言概述2. 基本语法:讲解数据类型、变量、常量、运算符、表达式等基本概念,为学生编程打下基础。

教材章节:第2章 数据类型与表达式3. 控制语句:学习顺序结构、分支结构、循环结构等控制语句,培养学生逻辑思维能力。

教材章节:第3章 控制语句4. 函数:介绍函数定义、调用、参数传递等知识,使学生掌握模块化编程方法。

c语言课程设计报告学生成绩管理系统

c语言课程设计报告学生成绩管理系统

c语言课程设计报告学生成绩管理系统一、教学目标本课程旨在让学生掌握C语言的基本语法和编程技巧,通过实现一个学生成绩管理系统,培养学生运用C语言解决实际问题的能力。

具体目标如下:1.知识目标:–掌握C语言的数据类型、运算符、控制结构、函数等基本语法。

–理解结构体和文件操作等相关知识。

2.技能目标:–能够运用C语言编写简单的程序。

–学会使用C语言实现数据的输入、输出和处理。

–掌握使用结构体创建学生成绩数据结构,并实现对成绩的增删改查等操作。

3.情感态度价值观目标:–培养学生对编程的兴趣,增强自信心。

–培养学生的团队协作能力和解决问题的能力。

二、教学内容本课程的教学内容主要包括C语言的基本语法、数据结构、文件操作等。

具体安排如下:1.C语言基本语法:数据类型、变量、运算符、控制结构、函数等。

2.数据结构:结构体、数组、指针等。

3.文件操作:文件的打开、关闭、读写等。

4.学生成绩管理系统:实现一个学生成绩管理系统,包括学生的增删改查、成绩的排序、统计等功能。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

1.讲授法:用于讲解C语言的基本语法和概念。

2.案例分析法:通过分析实际案例,让学生学会运用C语言解决实际问题。

3.实验法:让学生动手实践,编写程序,培养实际编程能力。

四、教学资源1.教材:《C程序设计语言》或《C语言入门教程》。

2.参考书:《C Primer Plus》、《C语言编程思想》等。

3.多媒体资料:教学PPT、视频教程等。

4.实验设备:计算机、网络等。

五、教学评估本课程的评估方式包括平时表现、作业、考试等。

评估方式应客观、公正,能够全面反映学生的学习成果。

具体安排如下:1.平时表现:占课程总评的30%,包括课堂参与度、提问回答、小组讨论等。

2.作业:占课程总评的30%,包括课后练习、编程作业等。

3.考试:占课程总评的40%,包括期中考试和期末考试。

六、教学安排本课程的教学安排如下:1.教学进度:按照教材的章节进行教学,确保在有限的时间内完成教学任务。

c图书管理系统课程设计报告

c图书管理系统课程设计报告

c图书管理系统课程设计报告一、教学目标本课程的教学目标是使学生掌握C图书管理系统的基本概念、设计原理和实现方法。

通过本课程的学习,学生应能够:1.理解C图书管理系统的基本组成部分及其功能;2.掌握C图书管理系统的设计原理和实现方法;3.能够运用C图书管理系统进行图书管理;4.培养学生的信息素养和创新能力。

二、教学内容本课程的教学内容主要包括:1.C图书管理系统的基本概念:介绍C图书管理系统的发展历程、基本功能和应用场景;2.C图书管理系统的设计原理:讲解C图书管理系统的架构设计、模块划分和算法实现;3.C图书管理系统的实现方法:介绍C图书管理系统的开发环境、编程语言和开发工具;4.实践操作:通过案例分析法和实验法,使学生熟练掌握C图书管理系统的操作和使用。

三、教学方法本课程采用多种教学方法相结合的方式,包括:1.讲授法:讲解C图书管理系统的基本概念、设计原理和实现方法;2.案例分析法:分析典型实例,使学生更好地理解C图书管理系统的应用;3.实验法:让学生动手实践,熟练掌握C图书管理系统的操作和使用;4.讨论法:鼓励学生提问、发表见解,培养学生的独立思考能力。

四、教学资源为实现本课程的教学目标,我们将提供以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统、全面的学习资料;2.参考书:推荐相关参考书籍,丰富学生的知识体系;3.多媒体资料:制作课件、演示文稿等多媒体教学资源,提高课堂教学效果;4.实验设备:为学生提供充足的实验设备,确保实验教学的顺利进行。

通过以上教学资源的支持,我们期望学生能够在本课程学习中取得良好的效果。

五、教学评估本课程的教学评估将采取多元化方式进行,以全面、客观、公正地评价学生的学习成果。

评估内容包括:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性;2.作业:布置适量作业,评估学生的理解和应用能力;3.考试:设置期中考试和期末考试,评估学生对课程知识的掌握程度;4.实践操作:通过实验报告和实际操作评估学生的动手能力和创新能力。

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇

c语言程序设计课程设计总结(菁选6篇c语言课程设计个人总结篇一当前,计算机已经成为人们工作、学习和生活中必不可少的工具,整个社会对计算机的高度依赖促使一个崭新的文化形态的形成――计算机文化。

随着高等教育从精英教育阶段进入大众教育阶段,教育部高等学校计算机科学与技术教学指导委员会在计算机基础课程教学基本要求中提出了1+X的课程设置方案[1],理工类学生在学学计算机基础课程后,接下来就要学习C语言程序设计,C语言程序设计已经成为各高校普遍开设的基础课程。

本文总结了我们在教学和实践中的一些做法和体会。

C语言功能强大,使用灵活方便,应用面广,可移植性好,兼有高级语言的优点和低级语言的特点[2],这也使得初学者较难学习和掌握,在教学中我们发现,学生往往对编程解决实际问题感到困难,不知从何下手,而一些考试题目往往重视考查语法的细节,而对编程能力考查得不多。

对于C语言程序设计的教学,我们从培养学生的兴趣和能力,以及计算机思维能力出发,进行了一系列教学的探索与实践。

一、教学师资团队建设人才培养师资队伍是关键,教学团队的建设是保障教学效果和实施教学的基础和支撑[3]。

根据本课程的特点和大一学生的基础,学院确定了一支老中青相结合的骨干教师组成本课程教学团队,团队由一位教授、一位副教授、四位讲师和三位助教组成,分别承担理论教学和实验教学任务,这支队伍年龄、职称结构合理,团队中的教师在每学期的教学督导和学生评教中,成绩都在良好以上,从根本上保证了课程的教学质量。

坚持教学团队的凝聚力建设,定期研讨,统一思想。

每周教研时间及时交流教学中出现的问题及解决方法,对教学过程进行总结反思,坚持互相听课,集体研究讨论教案、课件制作,对每个实验内容、案例的选用、考核的内容和方式等都经过团队的统一讨论确定。

重视教学团队中教师自身的进修和提高,团队中的多名教师先后参加了国家精品课程师资培训、全国高等学校计算机实验与实践教学研讨会、全国高等院校程序设计精品课程教学专题研讨会等,教师都很珍惜每一次与兄弟院校的教师、专家交流与学习的机会,教师及时把学习体会传达到团队的每一位教师,汲取其他院校的一些好的做法运用到我们的教学实践中,这些做法对促进教师的知识更新、教育理论的学习、教学方法的改进和教学能力的提高起到积极的作用,也保证了课程的教学能不断向前推进。

C语言课程设计实验报告(万年历)

C语言课程设计实验报告(万年历)

C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。

假定输入的年份在1-9999年之间。

2、输入年月,输出该月的月历。

3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。

:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。

即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。

二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。

c语言课程设计报告书3篇

c语言课程设计报告书3篇

c语言课程设计报告书3篇c语言课程设计报告书1我们学习它,有助于我们更好的了解计算机,与计算机进行交流,因此,c语言的学习对我们尤其重要。

在这个星期里,我们专业的学生在专业老师的带领下进行了c语言程序实践学习。

在这之前,我们已经对c语言这门课程学习了一个学期,对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,的在运用起来的时候还是感到很棘手,毕竟,万事开头难嘛。

由于时间的关系,我们的这次实践课程老师并没有给我们详细的介绍,只是给我们简单的介绍了几个比较重要的实际操作。

包括了程序模块处理。

简单界面程序。

高级界面程序。

程序的添加修改。

用程序做一元线性回归处理以及用c语言程序来画粒度分布图等这几样比较重要的时间操作。

上机实验是学习程序设计语言必不可少的实践环节,特别是c语言灵活、简洁,更需要通过编程的实践来真正掌握它。

对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。

学习c程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间。

因为学时所限,课程不能安排过多的上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用c语言开发程序的能力,为今后的继续学习打下一个良好的基础。

为此,我们结合课堂讲授的内容和进度,安排了12次上机实验。

课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:1、加深对课堂讲授内容的理解课堂上要讲授许多关于c语言的.语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。

然而要使用c语言这个工具解决实际问题,又必须掌握它。

通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握c语言的语法规定。

对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

C语言程序设计课程设计报告

C语言程序设计课程设计报告

成都航空职业技术学院《C语言程序设计》课程设计报告设计题目:C程序综合设计系别:航空电子工程系专业:应用电子技术班级:学号:学生姓名:赵儇宇指导教师:完成时间:年月日目录一、程序设计内容及要求 (1)二、程序总体设计思路 (2)1.课题一的总体设计思路 (2)2.课题二的总体设计思路 (3)三、程序各模块作用及详细设计 (3)1.课题一的各模块作用及详细设计 (3)2.课题二的各模块作用及详细设计 (13)四、程序运行过程截图及分析 (16)1.课题一程序运行过程截图及分析 (16)2.课题二程序运行过程截图及分析 (20)五、总结.................... . (22)六、附录(完整程序)......... (22)1.课题一完整程序 (22)2.课题二完整程序 (27)一、课程设计内容及要求题目1用户登录程序。

提示用户输入用户名和密码,判断是否是合法用户(假设合法的用户名是“abc”,密码是123456),如果合法,显示“welcom to use the software”,进入以下系统。

否则要求重新输入,允许输入3次,若3次都错,显示“password error!you can not use the sorftware”.一班有10名学生,一学期有5门课程,编写程序实现如下功能:(1)录入每名学生的各科成绩(2)求出每名学生的平均成绩和总分(3)求每门课程的平均分、及格率、最高成绩和最低成绩(4)输出总成绩前5名的学生学号、各科成绩和总分(5)输出各科补考学生的学号和成绩菜单格式如下:==================菜单===============1.成绩录入2. 学生信息3. 课程信息4. 获奖与补考信息0. 退出=======================================题目2小学生数学学习系统面向小学1~2年级学生,随机选择两个整数和加减法形成算式要求学生解答。

C语言课程设计报告—人事管理系统1

C语言课程设计报告—人事管理系统1

人事管理系统前言:现代计算机技术的发展为人们的学习、生活、工作提供了很大的帮助, 各行各业都需要特定计算系统的运用, 我们需要了解这些系统是怎么样为我们服务以及他们是怎样编辑出来的。

我们需要学习C语言编程, 根据课堂讲授内容, 做相应的自主练习, 消化课堂所讲解的内容;通过调试典型例题或习题积累调试C程序的经验;通过完成辅导教材中的编程题, 逐渐培养编程能力、用计算机解决实际问题的能力, 能够按照要求编辑一些基本的程序, 提高自己的思维能力。

题目:(1)某高校主要人员有: 在职人员(行政人员、教师、一般员工)、退休人员及临时工。

现在需要储存这些人员的人事档案信息, 内容包括编号、姓名、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间、人员类别。

其中, 人员编号唯一, 不能重复。

(2)添加删除功能:能根据学院人事的变动情况, 添加删除记录。

(3)查询功能: 能根据编号和姓名进行查询。

(4)编辑功能(高级): 根据查询对相应的记录进行修改并记录。

(5)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数, 高学历高职称人数), 统计要求同时显示被统计着的信息。

排序功能: 按照年龄、来院时间进行排序。

保存功能: 能对输入的数据进行相应的存储。

分析:我们编辑的程序要能够满足题目的要求, 可以进行这么多的功能的计算!但是在开始我们运行使用程序的时候必须要知道我们要运用这些功能中的哪一个!这就要求我们可以程序中任意选择我们所需要的功能!很显然我们要编辑存储人员的信息自然要运用到文件!而人员的信息必须要以结构体的形式来表示才能够方便我们提取信息!我们选择了要运行的功能分支之后!这些功能是以主函数以外的被调函数!当有需要时被调函数还可以调用其他的被吊函数!例如我们题目中的统计和查询功能, 就可以用这种方式来编辑程序!方便清楚!设计:很显然主程序要用到SWICTH函数, 这样可以选择要运行的那个功能的函数来执行, 而其他的功能函数则不必运行!三、解题思路1.定义结构struct staff{char num[10];char name[20];char sex[10];int age;char title[20];char p_landscape[30];char Qualifications[30];int Service_time;char come_time[30];char category[30];}staff[100];2.主程序进入主菜单函数void main(){menu();}/*******************主菜单函数**********************/void menu(){char w0;do{system("cls");fflush(stdin); /*清除缓冲区输入*/puts("***********************高校人事管理系统**********************\n\n");puts("\t\t\t\t1)增加人员信息\n"); puts("\t\t\t\t2)删除人员信息 \n"); puts("\t\t\t\t3)查询人员信息\n"); puts("\t\t\t\t4)修改人员信息\n"); puts("\t\t\t\t5)统计人员信息\n"); puts("\t\t\t\t6)对人员排序\n");puts("\t\t\t\t7)保存人员信息\n"); puts("\t\t\t\t8)浏览人员信息\n"); puts("\t\t\t\t9)退出\n");printf("\t\t\t\t 请选择 [ ]\b\b"); w0=getchar();}while(w0<'1'||w0>'9'); switch(w0-48){case 1:add();break;case 2:delete_data();break;case 3:search();break;case 4:modify();break; case 5:stastic();break;case 6:sort();break;case 7:save();break;case 8:browse();break;case 9:break;} }(1)查询功能int search_data()/*{int i,flag; char s[30],w0;system("cls");/*清屏*/ n=load(); do{fflush(stdin); /*清除缓冲区输入*/printf(" 通过1)编号 2)姓名 [ ]\b\b"); w0=getchar(); }while(w0<'1'||w0>'2'); if(w0=='1'){/*按编号查找*/ flag=0;puts("输入人员编号:"); scanf("%s",s); for(i=0;i<n;i++){if(strcmp(s,staff[i].num)==0){printf_face();printf_one(staff[i]); flag=1;break;} else continue; }if(flag==0)puts("该人员不存在!"); }else {/*按姓名查找*/ flag=0;puts("输入人员姓名:"); scanf("%s",s); for(i=0;i<n;i++){if(strcmp(s,staff[i].name)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0) puts("该人员不存在!");}return i;void search(){int k;char w1;loop: k=search_data();do{fflush(stdin); /*清除缓冲区输入*/printf("1)回主菜单 2)退出 3)继续查询 [ ]\b\b"); w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')menu();else if(w1=='2')exit(0);void add(){char w0,w1;loop: system("cls");puts("请输入编号(如001):");scanf("%s",s.num);if(test(s.num))goto loop;/*编号重复*/puts("请输入姓名:");scanf("%s",);puts("请输入性别(男,女):");scanf("%s",s.sex);puts("请输入年龄:");scanf("%d",&s.age);puts("请输入职务(教授副教授讲师助教学生后勤人员):");scanf("%s",s.duty);puts("请输入职称 (无初级高级 ):");scanf("%s",s.title);puts("请输入政治面貌( 党员非党员 ):");scanf("%s",s.p_landscape);puts("请输入最高学历(小学初中高中大学硕士学位更高):");scanf("%s",s.Qualifications);puts("请输入任职时间:");scanf("%d",&s.Service_time);puts("请输入来院时间(如20050101):");scanf("%s",e_time);puts("请输入人员类别(行政人员教师一般员工退休人员临时工):");scanf("%s",s.category);do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');switch(w0){case 1:save(s);break;case 2:break;}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续增加人员信息 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')goto loop;else if(w1=='2')menu();else exit(0);}(3)保存信息void save(){char w0;save_all();printf("所有信息已保存!\n");do{fflush(stdin); /*清除缓冲区输入*/printf("1) 回主菜单 2) 退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1')menu();else exit(0);}void save_all()/*保存所有数据函数*/{int i;FILE *fp;if((fp=fopen("text.txt","wb"))==NULL){printf("无法打开文件!");exit(0);}for(i=0;i<n;i++){if(staff[i].age!=0)fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name, staff[i].sex,staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,sta ff[i].Qualifications,staff[i].Service_time,staff[i].come_time,staff[i].category );else continue;}fclose(fp);}(4)删除人员void delete_data(){int k; char w0,w1;loop: k=search_data();if(k<n){do{fflush(stdin); /*清除缓冲区输入*/printf("确认要删除该人员信息? 1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){staff[k].age=0;save_all();puts("该人员信息已被删除!");} } do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续删除数据 2)回主菜单 3)退出w1=getchar();}while(w1<'1'||w1>'3'); if(w1=='1') goto loop; else if(w1=='2')menu(); else exit(0); }(5)修改人员信息 void modify() {int k=0,w0,g; char h[30],w1,w2; loop: g=search_data(); if(g<n){ do{puts("\t\t\t 修改: 1)编号"); puts("\t\t\t 2)姓名"); puts("\t\t\t 3)性别"); puts("\t\t\t 4)年龄"); puts("\t\t\t 5)职务"); puts("\t\t\t 6)职称"); puts("\t\t\t 7)政治面貌"); puts("\t\t\t 8)最高学历"); puts("\t\t\t 9)任职时间"); puts("\t\t\t 10)来院时间"); puts("\t\t\t 11)人员类别"); printf(" 请选择 : [ ]\b\b"); scanf("%d",&w0);}while(w0<1||w0>11); switch(w0){case 1:puts("请输入新编号:");scanf("%s",h);strcpy(staff[g].num,h);break; case 2:puts("请输入姓名:");scanf("%s",h);strcpy(staff[g].name,h);break; case 3:puts("请输入性别:");scanf("%s",h);strcpy(staff[g].sex,h);break; case 4:puts("请输入年龄:");scanf("%d",&k);staff[g].age=k;break; case 5:puts("请输入职务:");scanf("%s",h);strcpy(staff[g].duty,h);break; case 6:puts("请输入职称:");scanf("%s",h);strcpy(staff[g].title,h);break;scanf("%s",h);strcpy(staff[g].p_landscape,h);break;case 8:puts("请输入最高学历:");scanf("%s",h);strcpy(staff[g].Qualifications,h);break;case 9:puts("请输入任职时间:");scanf("%d",&k);staff[g].Service_time=k;break;case 10:puts("请输入来院时间:");scanf("%s",h);strcpy(staff[g].come_time,h);break;case 11:puts("请输入人员类别:");scanf("%s",h);strcpy(staff[g].category,h);break;}do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)保存 2)否[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'2');if(w1=='1'){save_all(); puts("保存修改成功!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续修改 2)回主菜单 3)退出[ ]\b\b");w2=getchar();}while(w2<'1'||w2>'3');if(w2=='1')goto loop;else if(w2=='2')menu();else exit(0);}(6)统计人员信息void stastic(){int i,count;char w0,w1;n=load();if(n==0){puts("没有数据!");getchar();menu();}loop: system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过1)在职人员 2)党员\n");printf(" 3)女工人数 4)最高学历 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'4');if(w0=='1'){/*统计在职人员*/printf_face();for(i=0,count=0;i<n&&staff[i].age;i++)if(strcmp(staff[i].category,"退休人员")!=0&&strcmp(staff[i].category,"临时工")!=0){count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count); }else if(w0=='2'){/*统计党员*/ printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].p_landscape,"党员count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count);}else if(w0=='3'){/*统计女工人员*/ printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].sex,"女")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t 共有%d 条记录",count);}else {/*统计高学历人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].Qualifications,"硕士学位")==0||strcmp(staff[i].Qualifications,"更高")==0){count++; printf_one(staff[i]);} printf("\t\t\t\t 共有%d 条记录",count);} do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)继续统计 2)回主菜单 3)退出 [ ]\b\b"); w1=getchar();}while(w1<'1'||w1>'3'); if(w1=='1') goto loop; else if(w1=='2')menu(); else exit(0); }(6) 排序功能void sort() {int i,j;char w0,w1; struct staff s1; loop: n=load();system("cls"); do{fflush(stdin); /*清除缓冲区输入*/printf("通过 1)年龄 2)来院时间w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){/*按年龄排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(staff[i].age>staff[j].age){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}else {/*按来院时间排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(strcmp(staff[i].come_time,staff[j].come_time)>0){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}printf_face();for(i=0;i<n;i++) /*显示排序结果*/printf_one(staff[i]);do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)回主菜单 2)继续排序 3)退出[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') menu();else if(w1=='2')goto loop;else exit(0);}四、运行与测试报告*********************************高校人事管理系统******************************1)增加人员信息2)删除人员信息3)查询人员信息4)修改人员信息5)统计人员信息6)对人员排序7)保存人员信息8)浏览人员信息9)退出请选择【 1】请输入编号(如001):20071003335请输入姓名:majianbo请输入性别(男,女):nan请输入年龄:20请输入职务(教授副教授讲师助教学生后勤人员): jiaoshou请输入职称 (无初级高级 ):gaoji请输入政治面貌( 党员非党员 ):danyuan请输入最高学历(小学初中高中大学硕士学位更高): shuoshi请输入任职时间:20070901请输入来院时间(如20050101):20070901请输入人员类别(行政人员教师一般员工退休人员临时工): jiaoshi是否保存?1)是 2)否 [1]该信息已成功保存!1)继续增加人员信息 2)回主菜单 3)退出 [ ]程序:#include<stdlib.h>#include <stdio.h>#include <string.h>struct staff/*定义结构体*/{char num[10];/*编号*/char name[20];/*姓名*/char sex[10];/*性别*/int age;/*年龄*/char duty[20];/*职务*/char title[20];/*职称*/char p_landscape[30];/*政治面貌*/char Qualifications[30];/*学历*/int Service_time;/*任职时间*/char come_time[30];/*来院时间*/char category[30];/*人员类别*/}staff[100];struct staff s;int n;void menu();void printf_face()/*显示数据结构项目函数*/{printf("编号姓名性别年龄职务职称政治面貌学历任职时间来院时间人员类别\n");}void printf_one(struct staff p)/*输出单个数据函数*/{printf("%-4s%-7s%-5s%-3d%-7s%-5s%-8s%-12s%-5d%-12s%-3s\n",p.num,,p.se x,p.age,p.duty,p.title,p.p_landscape,p.Qualifications,p.Service_time,e_tim e,p.category);}int load()/*加载函数*/{int i=0;FILE *fp;if((fp=fopen("text.txt","rb"))==NULL){return 0; exit(0);}for(i=0;!feof(fp);i++){ /*输出数据到结构体*/fscanf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name,staff [i].sex,&staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,staff[i ].Qualifications,&staff[i].Service_time,staff[i].come_time,staff[i].category);} fclose(fp);return i;}int search_data()/*查找单个数据函数*/{int i,flag;char s[30],w0;system("cls");/*清屏*/n=load();do{fflush(stdin); /*清除缓冲区输入*/printf(" 通过1)编号 2)姓名 [ ]\b\b");w0=getchar(); }while(w0<'1'||w0>'2');if(w0=='1'){/*按编号查找*/flag=0;puts("输入人员编号:");scanf("%s",s);for(i=0;i<n;i++){if(strcmp(s,staff[i].num)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0)puts("该人员不存在!");}else {/*按姓名查找*/flag=0;puts("输入人员姓名:");scanf("%s",s);for(i=0;i<n;i++){if(strcmp(s,staff[i].name)==0){printf_face();printf_one(staff[i]);flag=1;break;}else continue;}if(flag==0) puts("该人员不存在!");}return i;}void save_all()/*保存所有数据函数*/{int i;FILE *fp;if((fp=fopen("text.txt","wb"))==NULL){printf("无法打开文件!");exit(0);}for(i=0;i<n;i++){if(staff[i].age!=0)fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",staff[i].num,staff[i].name, staff[i].sex,staff[i].age,staff[i].duty,staff[i].title,staff[i].p_landscape,sta ff[i].Qualifications,staff[i].Service_time,staff[i].come_time,staff[i].category );else continue;}fclose(fp);}int test(char h[10])/*检查编号是否重复*/{int i;n=load();for(i=0;i<n;i++)if(strcmp(h,staff[i].num)==0){puts("输入的编号有重复!请重新输入编号!");system("pause");return 1;}return 0;}void single_save(struct staff p)/*保存单个数据函数*/{FILE *fp;if((fp=fopen("text.txt","ab+"))==NULL){printf("无法打开文件!");exit(0);}fprintf(fp,"%s %s %s %d %s %s %s %s %d %s %s\n",p.num,,p.sex,p.age,p.duty ,p.title,p.p_landscape,p.Qualifications,p.Service_time,e_time,p.category);printf("该信息已成功保存!\n");fclose(fp);}/*********************************修改模块**********************************/ void modify(){int k=0,w0,g;char h[30],w1,w2;loop: g=search_data();if(g<n){do{puts("\t\t\t修改: 1)编号");puts("\t\t\t 2)姓名");puts("\t\t\t 3)性别");puts("\t\t\t 4)年龄");puts("\t\t\t 5)职务");puts("\t\t\t 6)职称");puts("\t\t\t 7)政治面貌");puts("\t\t\t 8)最高学历");puts("\t\t\t 9)任职时间");puts("\t\t\t 10)来院时间");puts("\t\t\t 11)人员类别");printf(" 请选择 : [ ]\b\b");scanf("%d",&w0);}while(w0<1||w0>11);switch(w0){case 1:puts("请输入新编号:");scanf("%s",h);strcpy(staff[g].num,h);break;case 2:puts("请输入姓名:");scanf("%s",h);strcpy(staff[g].name,h);break;case 3:puts("请输入性别:");scanf("%s",h);strcpy(staff[g].sex,h);break;case 4:puts("请输入年龄:");scanf("%d",&k);staff[g].age=k;break;case 5:puts("请输入职务:");scanf("%s",h);strcpy(staff[g].duty,h);break;case 6:puts("请输入职称:");scanf("%s",h);strcpy(staff[g].title,h);break;case 7:puts("请输入政治面貌:");scanf("%s",h);strcpy(staff[g].p_landscape,h);break;case 8:puts("请输入最高学历:");scanf("%s",h);strcpy(staff[g].Qualifications,h);break;case 9:puts("请输入任职时间:");scanf("%d",&k);staff[g].Service_time=k;break;case 10:puts("请输入来院时间:");scanf("%s",h);strcpy(staff[g].come_time,h);break;case 11:puts("请输入人员类别:");scanf("%s",h);strcpy(staff[g].category,h);break;}do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)保存 2)否[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'2');if(w1=='1'){save_all(); puts("保存修改成功!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续修改 2)回主菜单 3)退出[ ]\b\b");w2=getchar();}while(w2<'1'||w2>'3');if(w2=='1')goto loop;else if(w2=='2')menu();else exit(0);}/************************保存模块******************************/void save(){char w0;save_all();printf("所有信息已保存!\n");do{fflush(stdin); /*清除缓冲区输入*/printf("1) 回主菜单 2) 退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1')menu();else exit(0);}/*************************查找模块*****************************/ void search(){int k;char w1;loop: k=search_data();do{fflush(stdin); /*清除缓冲区输入*/printf("1)回主菜单 2)退出 3)继续查询 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')menu();else if(w1=='2')exit(0);else goto loop;}/***************************增加模块*****************************/ void add(){char w0,w1;loop: system("cls");puts("请输入编号(如001):");scanf("%s",s.num);if(test(s.num))goto loop;/*编号重复*/puts("请输入姓名:");scanf("%s",);puts("请输入性别(男,女):");scanf("%s",s.sex);puts("请输入年龄:");scanf("%d",&s.age);puts("请输入职务(教授副教授讲师助教学生后勤人员):");scanf("%s",s.duty);puts("请输入职称 (无初级高级 ):");scanf("%s",s.title);puts("请输入政治面貌( 党员非党员 ):");scanf("%s",s.p_landscape);puts("请输入最高学历(小学初中高中大学硕士学位更高):");scanf("%s",s.Qualifications);puts("请输入任职时间:");scanf("%d",&s.Service_time);puts("请输入来院时间(如20050101):");scanf("%s",e_time);puts("请输入人员类别(行政人员教师一般员工退休人员临时工):");scanf("%s",s.category);do{fflush(stdin); /*清除缓冲区输入*/printf("是否保存?1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');switch(w0-48){case 1:single_save(s);break;case 2:break;}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续增加人员信息 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1')goto loop;else if(w1=='2')menu();else exit(0);}/*******************************删除模块*****************************/void delete_data(){int k; char w0,w1;loop: k=search_data();if(k<n){do{fflush(stdin); /*清除缓冲区输入*/printf("确认要删除该人员信息? 1)是 2)否 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){staff[k].age=0;save_all();puts("该人员信息已被删除!");}}do{fflush(stdin); /*清除缓冲区输入*/printf("1)继续删除数据 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') goto loop;else if(w1=='2')menu();else exit(0);}/********************************统计模块*******************************/void stastic(){int i,count;char w0,w1;n=load();if(n==0){puts("没有数据!");getchar();menu();}loop: system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过1)在职人员 2)党员\n");printf(" 3)女工人数 4)最高学历 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'4');if(w0=='1'){/*统计在职人员*/printf_face();for(i=0,count=0;i<n&&staff[i].age;i++)if(strcmp(staff[i].category,"退休人员")!=0&&strcmp(staff[i].category,"临时工")!=0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else if(w0=='2'){/*统计党员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].p_landscape,"党员")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else if(w0=='3'){/*统计女工人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].sex,"女")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}else {/*统计高学历人员*/printf_face();for(i=0,count=0;i<n;i++)if(strcmp(staff[i].Qualifications,"硕士学位")==0||strcmp(staff[i].Qualifications,"更高")==0){count++; printf_one(staff[i]);}printf("\t\t\t\t共有%d条记录",count);}do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)继续统计 2)回主菜单 3)退出 [ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') goto loop;else if(w1=='2')menu();else exit(0);}/*******************************排序模块***********************************/ void sort(){int i,j;char w0,w1;struct staff s1;loop: n=load();system("cls");do{fflush(stdin); /*清除缓冲区输入*/printf("通过 1)年龄 2)来院时间 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1'){/*按年龄排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(staff[i].age>staff[j].age){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}else {/*按来院时间排序*/for(i=0;i<n-1;i++)/*选择法排序*/for(j=i+1;j<n;j++)if(strcmp(staff[i].come_time,staff[j].come_time)>0){s1=staff[i];staff[i]=staff[j];staff[j]=s1;}}printf_face();for(i=0;i<n;i++) /*显示排序结果*/printf_one(staff[i]);do{fflush(stdin); /*清除缓冲区输入*/printf("\n1)回主菜单 2)继续排序 3)退出[ ]\b\b");w1=getchar();}while(w1<'1'||w1>'3');if(w1=='1') menu();else if(w1=='2')goto loop;else exit(0);}/********************************浏览模块**************************************/void browse(){int i;char w0;n=load();system("cls");printf_face();for(i=0;i<n ;i++)printf_one(staff[i]);printf("\t\t\t\t共有%d条人员记录\n",n);do{fflush(stdin); /*清除缓冲区输入*/printf(" 1)回主菜单 2)退出 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'2');if(w0=='1') menu();if(w0=='2') exit(0);}/********************************主菜单函数*************************************/void menu(){char w0;do{system("cls");fflush(stdin); /*清除缓冲区输入*/puts("*********************************高校人事管理系统*******************************\n\n");puts("\t\t\t\t1)增加人员信息\n");puts("\t\t\t\t2)删除人员信息 \n");puts("\t\t\t\t3)查询人员信息\n");puts("\t\t\t\t4)修改人员信息\n");puts("\t\t\t\t5)统计人员信息\n");puts("\t\t\t\t6)对人员排序\n");puts("\t\t\t\t7)保存人员信息\n");puts("\t\t\t\t8)浏览人员信息\n");puts("\t\t\t\t9)退出\n");printf("\t\t\t\t请选择 [ ]\b\b");w0=getchar();}while(w0<'1'||w0>'9');switch(w0-48){case 1:add();break;case 2:delete_data();break;case 3:search();break;case 4:modify();break;case 5:stastic();break;case 6:sort();break;case 7:save();break;case 8:browse();break;case 9:break;}}/***********************************主函数****************************************/void main(){menu();}。

C语言课程设计实验报告-学生成绩统计软件

C语言课程设计实验报告-学生成绩统计软件

C 语言课程设计实验报告一 问题描述:编辑一个学生成绩统计软件 二 基本要求:1) 每条记录由学号、姓名、若干门课程的成绩组成; 2) 能计算每个学生的总分和平均分并显示;3) 能按平均分统计各分数段的人数,并以分布图显示,如右图所示。

4) 在此基础上,可进行文件操作。

三 系统分析和设计函数的设计,其最终目的是要实现所需要的功能。

本例中,是用main 函数调用两个子函数来实现的! 1)文件的建立:要想实现对学生成绩的统计,首先要建立一个文件用来存放学生信息,要用到FILE 文件指针。

fp1=fopen("c:\\turboc2\\file1.rec","w+"); 2)程序的设计:学生的信息放在结构体数组struct student_score s[N]中。

通过for 循环,调用子函数getdata ,从键盘接收学生信息(num ,name ,score[0],score[1],score[2],score[3]),并计算总分与平均分,返回学生信息return st 到调用处。

用fprintf 函数向文件中逐一写入学生的信息,通过rewend(fp1)函数使文件指针回到文件头,用fscanf 读学生信息,并显示在屏幕上。

同时根据所读学生信息,统计各分数段的人数s1++,s2++,s3++,s4++,s5++,然后调用一个子函数putsgraph 用来输出图表!四 结构图主函数五 流程图:(背面)具体程序如下:#define N 5#include"stdio.h"#include"stdlib.h"struct student_score{long num;char name[20];float score[4];float total;float aver;}s[N];main(){FILE *fp1;struct student_score getdata(struct student_score st,int x);int putsgraph(int sa, int sb,int sc,int sd,int se);int i=0,s1=0,s2=0,s3=0,s4=0,s5=0;fp1=fopen("c:\\turboc2\\file1.rec","w+");for(i=0;i<N;i++)s[i]=getdata(s[i],i);for(i=0;i<N;i++)fprintf(fp1,"%-7ld%-10s%10.1f%10.1f%10.1f%10.1f%10.1f%10.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2],s[i].score[3],s[i].total,s[i].aver);rewind(fp1);{long num;char name[20];float e,f,g,h,total,aver;for(i=0;i<N;i++){fscanf(fp1,"%ld%s%f%f%f%f%f%f\n",&num,name,&e,&f,&g,&h,&total,&aver);printf("%-7ld%-20s%10.1f%10.1f\n",num,name,total,aver);if(aver<60) s1++;else if(aver<70) s2++;else if(aver<80) s3++;else if(aver<90) s4++;else if(aver<=100) s5++;}}fclose(fp1);putsgraph(s1,s2,s3,s4,s5);}struct student_score getdata(struct student_score st,int x){int y;printf("\nEnter student%d\'s num:\n",x+1);scanf("%ld",&st.num); getchar();printf("\nEnter name:\n");gets();st.total=0;printf("\nEnter 4 scores:\n");for(y=0;y<4;y++){scanf("%f",&st.score[y]);getchar();st.total+=st.score[y];}st.aver=st.total/4;return st;}int putsgraph(int sa, int sb,int sc,int sd,int se){int i,j;char graph[16][80];for(i=0;i<16;i++){for(j=0;j<79;j++) graph[i][j]=' ';graph[i][79]='\0';}for(j=0;j<79;j++) graph[11][j]='-';for(j=3;j<=15;j+=4){ graph[12][j]='<'; graph[12][j+2]='0'; }graph[12][4]='6';graph[12][8]='7';graph[12][12]='8';graph[12][16]='9';graph[12][19]='<'; graph[12][20]='=';graph[12][21]='1';graph[12][22]='0'; graph[12][23]='0';for(i=10;i>(10-sa);i--) graph[i][4]='o';for(i=10;i>(10-sb);i--) graph[i][8]='o';for(i=10;i>(10-sc);i--) graph[i][12]='o';for(i=10;i>(10-sd);i--) graph[i][16]='o';for(i=10;i>(10-se);i--) graph[i][20]='o';for(i=0;i<16;i++) puts(graph[i]);}六测试数据Entrer student1’ num:7879366Enter name:wuhaoEnter 4 scores:66778894Entrer student2’ num:7879343Enter name:JiapanEnter 4 scores:87547683Entrer student3’ num:7879343Enter name:huboEnter 4 scores:85907061Entrer student4’ num:7879422Enter name:jinleiEnter 4 scores:72846578Entrer student5’ num:7879222Enter name:yananEnter 4 scores:37728975结果:7879366 wuhao 325.0 81.2 7879343 jiapan 300.0 75.07879456 hubo 306.0 76.57879422 jinlei 299.0 74.87879222 yanan 273.0 68.2ooo o o-----------------------------------------<60 <70 <80 <90 <=100七软件说明:本程序采用宏定义方式定义学生人数,增加程序的通用性,文件的路径为c:\\turboc2\\file1.rec,当运行结束后,可在dos状态下,输入命令行:type file1.rec打开此文件以检验文件的建立是否正确,并且可以查看学生的全部信息。

C语言课程设计报告模版(电子版)

C语言课程设计报告模版(电子版)
要求:
1.熟悉Turbo C的编程环境、主要菜单功能。
2.通过上机验证运算符、表达式、运算规则、函数使用。
3.熟练使用C语言的典型语句编写简单程序。
4.调试典型例题或习题。
5.提高上机编程能力
二、实验类型
设计类型
三、实验学时
40学时
四、实验设备
微型计算机、WINDOWS98以上版本的操作系统、Turbo C2.0软件一套
(3)输出候选人及其得票数。
1.2
(将程序执行图,粘贴在此)
1.3
#include"string.h"
struct person
{ char name[20];
int count;
} leader[5]={"liang",0,"wei",0,"long",0,"chen",0,"chao",0};
main()
float d ;
for(i=0;i<n;i++)
{ d=0.0;
for(j=0;j<4;j++)
d+=p->s[j];
p->sum=d;
p++;
}
}Hale Waihona Puke void sort(struct student *p,int n)
{ struct student t;
int i,j,k;
for(i=0;i<n-1;i++)

4.1
需求分析是软件开发中最重要的环节,它直接影响着项目的成功与失败。通过对用户需求进行调查分析,写出需求分析的文档。需求分析的文档可以作为项目设计的基本要求,也可以作为系统分析员进行系统分析和测试人员进行软件测试的手册。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书课程设计报告课程:面向对象程序设计学号:02姓名:***班级:09030301教师:沈阳理工大学信息学院课程设计名称:小型特殊计算器1.设计内容:实现一个特殊的计算器,可以实现复数、有理数、矩阵和集合的特殊计算。

程序可以实现复数、有理数的加、减、乘、除,可以实现矩阵的加法、减法和乘法运算,也可以实现集合的求交集、并集、子集的运算。

2.设计目的与要求:2.1设计目的达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的基本思路和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。

2.2设计要求要求利用面向对象的方法以及C++的编程思想来完成系统的设计;要求在设计的过程中,建立清晰的类层次;在系统的设计中,至少要用到面向对象的一种机制。

3.系统分析与设计3.1主要知识点运算符重载增加了C++语言的可扩充性。

运算符的重载实际上就是一种函数调用的形式,可以用成员函数重载运算符,就是将运算符重载定义为一个类的成员函数的形式;也可以用友元函数重载。

用友元重载运算符的友元函数是独立于类以外的一般函数。

3.2关键技术程序中每一种数据类型用一个类来实现,共设计了4个类。

复数类complex,矩阵类matrix,有理数类rational以及集合类set。

每一种类都定义了相应的运算符重载函数。

具体定义如下所示:(1)类complex类complex中,成员变量image表示虚部,real表示实部。

成员函数print()用来显示数据。

运算符重载函数都是用友元函数来实现的。

分别重载+、-、*、/运算符。

(2)类matrix类matrix中,成员变量elems用来存放矩阵的所有元素,rows表示矩阵的行,cols表示矩阵的列。

成员函数SetElems()用来给矩阵中的每一个元素赋值,Disp()用来显示矩阵中的所有元素。

其它友元函数分别重载+、-、*、/运算符。

(3)类rational类rational中,有两个成员变量:denominator用来表示有理数的分母,numerator表示有理数的分子。

有理数成员函数print()用来显示有理数,optimization()用来优化有理数函数。

友元函数real()用来将有理数转换为实数,其它友元函数分别重载+、-、*、/运算符。

(4)类set类set中,有两个成员变量:elems用来存储集合中的元素,card表示集合中元素的个数。

成员函数print()用来输出集合中的元素,additem()用来给集合增加元素。

友元函数分别重载了&、==、!=、+、*、<、<=运算符。

程序中的运算符重载函数都用友元函数来实现。

①类complex的友元函数复数的表达形式为a+bi,对复数进行运算符重载不像对一般书进行运算那样简单,它的运输方法如下:加法:(a+bi)+(c+di)=(a+c)+(b+d)i减法:(a+bi)-(c+di)=(a-c)+(b-d)i乘法:(a+bi)*(c-di)=(ac-bd)+(ad+bc)i除法:(a+bi)/(c+di)=((a+bi)*(c-di))/(c2+d2)重载函数将以上算法用在了函数中。

②类matrix的友元函数矩阵类的赋值,实质上是给二维数组赋值;矩阵相加减就是两个行数列数相同的二维数组相加减;二维数组相乘,其实就是两个二维数组,其中一个的行数等于另一个的列数,按矩阵相乘的法则进行计算。

③类rational的友元函数对有理数类进行的操作有下面几种:有理数相加:当两个有理数a/b和c/d相加时,可得到这样的算式:a/b+c/d=(a*d+b*c)/(b*d)有理数相减:当两个有理数a/b和c/d相减时,得到的结果是:分子:a*d-b*c分母:b*d有理数相乘:当两个有理数a/b和c/d相乘时,得到的结果是:分子:a*c分母:b*d有理数相除:当两个有理数a/b和c/d相除时,得到的结果是:分子:a*d分母:b*c每次得到结果时,都需要对有理数进行优化。

④类set的友元函数集合类的运算符重载操作主要有以下几种:判定某一元素是否属于集合:此操作用重载运算符函数&实现,返回值只有两种情况true或者false,取bool类型。

判断两个集合是否相等:判定两个集合是否相等,需要看两个集合中所包含的元素是否相同,并且不管顺序如何。

用重载运算符==来实现。

判断两个集合是否不等:是相等操作的取反,用!=来实现两个集合的交集:即求出两个集合中的公共元素,用运算符*实现。

两个个集合的并集:即两个集合相合并,合并以后去掉重复的元素,用运算符+来实现。

判定一个集合是否是另一个集合的子集:用运算符<=来实现判定一个集合是否是另一个集合的纯子集:用运算符<实现3.3基本功能要求(1)功能选择可以用菜单来实现例如:请选择您的计算内容:1.复数计算2.有理数计算3.矩阵计算4.集合计算0.退出用户通过输入不同的数字进入不同的菜单。

次级菜单主要显示本程序的功能,主要的功能有加法、减法、乘法和除法以及集合的求交集、求并集、求子集。

(2)运行时给出明确的提示信息。

比如,输入一个什么类型的数据。

根据用户的输入计算输出结果。

由于数据类型比较多,可以一次输入第一个复数的实部,第一个复数的虚部,再输入第二个复数的实部、虚部。

矩阵运算需要先输入矩阵的行数和列数,然后依次输出矩阵的第一行第一列的元素、第一行第二列的元素等等,依次类推。

有理数运算需要一次输入有理数的分子、分母。

集合运算需要输入集合的元素个数,然后依次输入集合中的每一个元素。

4.系统总体设计(确定程序功能模块)本程序的功能结构如1所示:图1程序功能结构图5.源程序代码/*****************************************************************************/#include<iostream.h>#include <math.h>#include <iomanip.h>/**************************************************************** *************///定义有理数类class rational{public:void print(); //输出函数rational(int x=0,int y=0);virtual ~rational();friend rational operator + (rational num1,rational num2); //重载运算符+friend rational operator - (rational num1,rational num2); //重载运算符-friend rational operator * (rational num1,rational num2); //重载运算符*friend rational operator / (rational num1,rational num2); //重载运算符/friend bool operator ==(rational num1,rational num2); //重载运算符==friend double real(rational x); //声明转换函数private:void optimization(); //优化有理数函数int denominator; //分母int numerator; //分子};/**************************************************************** *************/// 定义矩阵类class matrix{public:void Disp(); //显示矩阵所有元素int matrix::operator ()(short row, short col); //重载运算符成员函数()void SetElem(short row,short col,int val); //将元素(row,col)设置为valmatrix();matrix(short r,short c){rows= r;cols= c;elems= new int[rows*cols];}virtual ~matrix();friend matrix operator +(matrix p,matrix q); //重载运算符+friend matrix operator -(matrix p,matrix q); //重载运算符-friend matrix operator *(matrix p,matrix q); //重载运算符×private:int * elems; //存放矩阵的所有元素short cols; //矩阵的列short rows; //矩阵的行};/**************************************************************** *************///定义集合类enum errcode {noerr,overflow};class set{public:void print(); //显示输出集合元素set(){card=0;}virtual ~set();errcode additem(int); //增加集合元素friend bool operator &(int,set); //声明重载运算符&,判断某一整数是否属于某一集合friend bool operator ==(set,set); //声明重载运算符==,判断两个集合是否相等friend bool operator !=(set,set); //声明重载运算符!=,判断两个集合是否不等friend set operator *(set,set); //声明重载运算符*,求两个集合的交friend set operator +(set,set); //声明重载运算符+,求两个集合的并friend bool operator <(set,set); //声明重载运算符<,判断某一集合是否为另一集合的纯子集friend bool operator <=(set,set); //声明重载运算符<=,判断某一集合是否为另一集合的子集private:int elems[16];int card;};/*****************************************************************************/// 有理数类的各个成员函数的具体定义rational::rational(int x,int y){numerator= x;denominator= y;optimization(); //有理数优化}rational::~rational(){}/**************************************************************** *************//*函数名称:optimization功能描述:定义有理数优化函数修改记录:*/void rational::optimization(){int gcd;if(numerator==0) //如果分子为零,则分母为1后返回{denominator= 1;return;}//取分子分母中较小的数作为公约数极限gcd=(abs(numerator)>abs(denominator))?abs(numerator):abs(denominator);if(gcd==0)return; //若为0,则返回for(int i= gcd;i>1;i--) //用循环找最大公约数if((numerator%i==0)&& (denominator%i==0))break;numerator/=i; //i为最大公约数,将分子分母整除它,重新赋值denominator/=i;//若分子分母均为负数,则结果为正if(numerator<0 && denominator<0){numerator= -numerator;denominator= -denominator;}//若分子分母只有一个为负数,则调整为分子取负,分母取正else if(numerator<0 || denominator<0){numerator= -abs(numerator);denominator=abs(denominator);}}/**************************************************************** *************//*函数名称:print功能描述:显示复数修改记录:*/void rational::print(){cout<<numerator;if(numerator!=0 && denominator!=1)cout<<"/"<<denominator<<"\n";elsecout<<"\n";}/**************************************************************** *************//*函数名称:operator +功能描述:重载运算符+修改记录:*/rational operator + (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator+num1.denominator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator -功能描述:重载运算符-修改记录:*/rational operator - (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.denominator-num1.denominator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator *功能描述:重载运算符*修改记录:*/rational operator * (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.denominator ;temp.numerator = num1.numerator *num2.numerator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator /功能描述:重载运算符/修改记录:*/rational operator / (rational num1,rational num2){rational temp;temp.denominator =num1.denominator *num2.numerator ;temp.numerator = num1.numerator *num2.denominator ;temp.optimization ();return temp;}/**************************************************************** *************//*函数名称:operator ==功能描述:重载运算符==修改记录:*/bool operator ==(rational num1,rational num2){if(num1.numerator ==num2.numerator && num1.denominator==num2.denominator )return true;elsereturn false;}/**************************************************************** *************//*函数名称:print功能描述:声明转换函数,将有理数对象转换为实数修改记录:*/double real(rational x){return(double(x.numerator ))/(double(x.denominator ));}/**************************************************************** *************/// 矩阵类的各个成员函数的具体定义matrix::matrix(){}matrix::~matrix(){}/**************************************************************** *************//*函数名称: matrix::operator ()(short row, short col)功能描述:重载运算符成员函数修改记录:*/int matrix::operator ()(short row, short col){if(row>=1 && row<=rows && col>=1 && col<=cols)return elems[(row-1)*cols + (col-1)];elsereturn 0;}/**************************************************************** *************//*函数名称: matrix::SetElem(short row, short col,int val)功能描述:将元素(row,col)设置为val修改记录:*/void matrix::SetElem(short row, short col,int val){if(row>=1 && row<=rows && col>=1 && col<=cols)elems[(row-1)*cols+(col-1)]= val;}/**************************************************************** *************//*函数名称: matrix::Disp()功能描述:显示矩阵元素修改记录:*/void matrix::Disp(){for(int row=1;row<=rows;row++){for(int col=1;col<=cols;col++)cout<<setw(2)<<(*this)(row,col)<<" ";cout<<endl;}}/**************************************************************** *************//*函数名称: operator +(matrix p,matrix q)功能描述:重载运算符+修改记录:*/matrix operator +(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.rows!=q.rows || p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++)m.SetElem(r,c,p(r,c)+q(r,c));return m;}/**************************************************************** *************//*函数名称: operator -(matrix p,matrix q)功能描述:重载运算符-修改记录:*/matrix operator -(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.rows!=q.rows || p.cols!=q.cols)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++)m.SetElem(r,c,p(r,c)-q(r,c));return m;}/**************************************************************** *************//*函数名称: operator *(matrix p,matrix q)功能描述:重载运算符*修改记录:*/matrix operator *(matrix p,matrix q){matrix m(p.rows,p.cols);if(p.cols!=q.rows)return m;for(int r=1;r<=p.rows;r++)for(int c=1;c<=p.cols;c++){int s=0;for(int i=1;i<=p.cols;i++)s+=p(r,i)*q(i,c);m.SetElem(r,c,s);}return m;}/*****************************************************************************/// 集合类的各个成员函数的具体定义set::~set(){}/**************************************************************** *************//*函数名称:print功能描述:显示复数修改记录:*/void set::print(){cout<<"{";for(int i=0;i<card-1;i++)cout<<elems[i]<<",";if(card>0)cout<<elems[card-1]<<"}\n";}/**************************************************************** *************//*函数名称:additem功能描述:增加集合元素修改记录:*/errcode set::additem(int elem){for(int i=0;i<card;i++)if(elems[i]==elem)return noerr;if(card<16){elems[card++]=elem;return noerr;}elsereturn overflow;}/**************************************************************** *************//*功能描述:声明重载运算符&,判断某一整数是否属于某一集合修改记录:*/bool operator &(int elem,set set1){for(int i=0;i<set1.card ;++i)if(set1.elems[i]==elem)return true;return false;}/**************************************************************** *************//*函数名称:operator ==功能描述:声明重载运算符==,判断两个集合是否相等修改记录:*/bool operator ==(set set1,set set2){if(set1.card !=set2.card ) //两个集合个数不等,必不相等return false;for(int i=0;i<set1.card;i++)if(!(set1.elems [i]& set2)) //调用&定义return false;return true;}/**************************************************************** *************//*函数名称:operator !=功能描述:声明重载运算符!=,判断两个集合是否不等修改记录:*/bool operator !=(set set1,set set2){if(set1== set2)return false;elsereturn true;}/**************************************************************** *************//*功能描述:声明重载运算符*,求两个集合的交修改记录:*/set operator *(set set1,set set2){set res;for(int i=0;i<set1.card ;i++)for(int j=0;j<set2.card ;j++)if(set1.elems [i]==set2.elems [j]){res.elems [res.card ++]= set1.elems [i];break;}//取set1中的每一个元素判断是否属于set2,若属于则加入到res中return res;}/**************************************************************** *************//*函数名称:operator +功能描述:声明重载运算符+,求两个集合的并修改记录:*/set operator +(set set1,set set2){set res=set1;for(int i=0;i<set2.card ;i++)res.additem (set2.elems [i]); //将set2中的元素追加到res中return res;}/**************************************************************** *************//*函数名称:operator <功能描述:声明重载运算符<,判断某一集合是否为另一集合的纯子集修改记录:*/bool operator <(set set1,set set2){if(set1.card<set2.card && set1<=set2)return true;elsereturn false;}/**************************************************************** *************//*函数名称:operator <=功能描述:声明重载运算符<=,判断某一集合是否为另一集合的子集修改记录:*/bool operator <=(set set1,set set2){if(set1.card >set2.card )return false;for(int i=0;i<set1.card ;i++)if(!(set1.elems [i] & set2))return false;return true;}/**************************************************************** *************/void jiemian();void tuichu();void complexcompute();void rationalcompute();void matrixcompute();void setcompute();/**************************************************************** ********//* main函数*//**************************************************************** ********/int main(){jiemian();return 0;}/**************************************************************** ********//* 主界面函数,实现了界面及函数调用*//************************************************************************/void jiemian(){int i;cout<<endl<<endl;cout<<"---------------------------------------------------------------"<<endl;cout<<"**"<<endl;cout<<" 欢迎进入用运算符重载实现特殊计算器程序"<<endl;cout<<"**"<<endl;cout<<"----------------------------------------------------------------"<<endl;while(i){cout<<endl<<endl;cout<<"请选择您的计算类型:"<<endl<<endl;cout<<" 1.有理数计算;"<<endl;cout<<" 2.矩阵计算;"<<endl;cout<<" 3.集合计算;"<<endl;cout<<" 0.退出;"<<endl;cout<<"请选择按键(0-4):";cin>>i;cout<<endl;//判断输入,0退出if(i>=0 && i<=4){switch(i){case 1:rationalcompute();break;case 2:matrixcompute();break;case 3:setcompute();break;case 0:tuichu();break;}}elsecout<<"输入错误!";cout<<"重新输入"<<endl;}}}/**************************************************************** ********//* 退出函数*//**************************************************************** ********/void tuichu(){cout<<"---------------------------------------------------------------"<<endl;cout<<"**"<<endl;cout<<" 谢谢使用运算符重载实现特殊计算器程序,再见!"<<endl;cout<<"**"<<endl;cout<<"----------------------------------------------------------------"<<endl;}/**************************************************************** ********//* 有理数计算函数*//**************************************************************** ********/void rationalcompute(){int j;cout<<"请选择您的有理数计算内容:"<<endl<<endl;cout<<" 1.两个有理数相加;"<<endl;cout<<" 2.两个有理数相减;"<<endl;cout<<" 3.两个有理数相乘;"<<endl;cout<<" 4.两个有理数相除;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-4):";cin>>j;cout<<endl;{//判断输入,0退出if(j>=0 && j<=4){int r1,j1,r2,j2;cout<<"请输入第一个有理数的分子:";cin>>r1;cout<<"请输入第一个有理数的分母:";cin>>j1;cout<<"请输入第二个有理数的分子:";cin>>r2;cout<<"请输入第二个有理数的分母:";cin>>j2;rational c1(r1,j1);rational c2(r2,j2);rational c3;switch(j){//case1:有理数相加case 1:c3=c1+c2;c1.print ();c2.print ();c3.print ();break;case 2:c3=c1-c2;c1.print ();c2.print ();c3.print ();break;case 3:c3=c1*c2;c1.print ();c2.print ();c3.print ();break;case 4:c3=c1/c2;c1.print ();c2.print ();c3.print ();break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的有理数计算内容:"<<endl<<endl;cout<<" 1.两个有理数相加;"<<endl;cout<<" 2.两个有理数相减;"<<endl;cout<<" 3.两个有理数相乘;"<<endl;cout<<" 4.两个有理数相除;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-4):";cin>>j;cout<<endl;}}/**************************************************************** ********//* 矩阵计算函数*//**************************************************************** ********/void matrixcompute(){int j;cout<<"请选择您的矩阵计算内容:"<<endl<<endl;cout<<" 1.两个矩阵相加;"<<endl;cout<<" 2.两个矩阵相减;"<<endl;cout<<" 3.两个矩阵相乘;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;while(j){//判断输入,0退出if(j>=0 && j<=3){int r1,j1,r2,j2,val;cout<<"请输入第一个矩阵的行数:";cin>>r1;cout<<"请输入第一个矩阵的列数:";cin>>j1;cout<<"请输入第二个矩阵的行数:";cin>>r2;cout<<"请输入第二个矩阵的列数:";cin>>j2;matrix c1(r1,j1);matrix c2(r2,j2);matrix c3;cout<<"请输入第一个矩阵的元素:"<<endl;for(int m=1;m<=r1;m++)for(int n=1;n<=j1;n++){cout<<"第"<<m<<"行"<<n<<"列:";cin>>val;c1.SetElem (m,n,val);}c1.Disp();cout<<"请输入二个矩阵的元素:"<<endl;for(int h=1;h<=r2;h++)for( int k=1;k<=j2;k++){cout<<"第"<<h<<"行"<<k<<"列:";cin>>val;c2.SetElem (h,k,val);}c2.Disp();switch(j){case 1:c3=c1+c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;case 2:c3=c1-c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;case 3:c3=c1*c2;cout<<"第一个矩阵为:"<<endl;c1.Disp();cout<<"第二个矩阵为:"<<endl;c2.Disp();cout<<"第三个矩阵为:"<<endl;c3.Disp();break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的矩阵计算内容:"<<endl<<endl;cout<<" 1.两个矩阵相加;"<<endl;cout<<" 2.两个矩阵相减;"<<endl;cout<<" 3.两个矩阵相乘;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;}}/**************************************************************** ********//* 集合计算函数*//**************************************************************** ********/void setcompute(){int j;cout<<"请选择您的集合计算内容:"<<endl<<endl;cout<<" 1.两个集合的交集;"<<endl;cout<<" 2.两个集合的并集;"<<endl;cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;while(j){//判断输入,0退出if(j>=0 && j<=3){int r1,r2,val;set set1,set2,set3;cout<<"请输入第一个集合的元素个数:";cin>>r1;cout<<"请输入第二个集合的元素个数:";cin>>r2;cout<<"请输入第一个集合的元素:"<<endl;for(int n=1;n<=r1;n++){cout<<"第"<<n<<"个元素为:";cin>>val;set1.additem (val);}set1.print ();cout<<"请输入二个集合的元素:"<<endl;for(n=1;n<=r2;n++){cout<<"第"<<n<<"个元素为:";cin>>val;set2.additem (val);}set2.print ();switch(j){//case1:并集case 1:set3=set1*set2;cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();cout<<"交集为:"<<endl;set3.print ();break;case 2:set3=set1+set2;cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();cout<<"并集为:"<<endl;set3.print ();break;case 3:cout<<"第一个集合为:"<<endl;set1.print ();cout<<"第二个集合为:"<<endl;set2.print ();if(set1<set2)cout<<"第一个集合为第二个集合的子集!"<<endl;break;}}elsecout<<"按键错误,请重新选择!"<<endl;cout<<endl;cout<<"请选择您的集合计算内容:"<<endl<<endl;cout<<" 1.两个集合的交集;"<<endl;cout<<" 2.两个集合的并集;"<<endl;cout<<" 3.一个集合是否为另一个集合的子集;"<<endl;cout<<" 0.返回主界面;"<<endl;cout<<"请选择按键(0-3):";cin>>j;cout<<endl;}}6.运行结果程序运行时,首先出现主界面菜单,由用户进行功能选择,选择不同的数字,进入不同的功能区。

相关文档
最新文档