C语言程序设计(二)

第二节课我们知道的是,C语言将计算机的输入输出设备都可以看作是文件。

根据资料显示,那么,如果写一个字符串到一个文件中,是什么方式呢?显示到屏幕上是默认的输出文件,如果是硬盘中的一个文件,首先要打开一个文件,然后才能往里写,那么就要告诉程序这个文件在什么地方,按照什么样的方式打开(读、写、读和写、添加、覆盖等),然后打开后要给这个打开的文件一个符号(指针变量),表示后续的读和写都是针对这个文件的,而不是到屏幕的,这个指针变量以后就代表了文件自身了。

我们分析例如学生信息管理系统中,需要同时保存一个学生的姓名,性别,年龄等信息,那么设置变量保存很多同学的这些信息就有点不太方便。类似一个登记本,每一页只能写名字,如果你要登记其他的信息,又要添加一个登记本,只能写性别,如果登记年龄,又要添加一个登记本,只能写年龄,….,多么的不方便,还容易混乱。解决的方法你一定想,多么简单,一个登记本一页中,同时写姓名,性别,年龄不就行了吗?C语言也是这样,如果定义一种形式,一个变量同时记录很多的信息,这样在管理系统中,就方便很多了。这就是结构体。

结构体首先要定义,因为每个程序用到的组合在一起的信息不一样,例如学生信息管理系统中,可能要将学号、姓名、性别、年龄、班级组合到一起,所以 第一行用struct告诉程序,下面是一个结构体,后面的stu是这个结构体的类型,类似整数用int表示,这个stu是你自己起的名字。

如果没有班级的话,咱们全校学生在一个班里面,可以想象管理会多么混乱。咱们想了一个办法,把同学按照专业分到不用的班级中,这样管理起来就方便多了,系里发通知等,只发到班长就行了,由班长向下传达,班级内部更改活动内容,也跟其他班级没有关系,自己关起门来修改就可以了。所以程序也是这样,如果是把所有的代码都放到一起,那跟全校所有的同学都在一个班级一样,互相之间相互联系,程序代码短还没有什么问题,程序代码量一多了,将非常难管理。所以按照功能,将不同的代码放到一起,用大括号括起来,然后给这段代码起个名字表示,类似咱们班级的名字,然后还要设置上参数,一遍使用这个函数的时候向里传递实际的值,类似一个加法的函数,完成两个数的相加,我可以写成

myadd(int a, int b)

{

intc;

c=a+b;

return c;

}

myadd就是我给这个函数起的名字,以便使用,a和b的作用接收调用者传递过来的数,然后把接收的两个数相加后返回,这个函数的值在调用后就是返回的值c,所以如果我们想算99+23等于多少,只要调用我们写好的函数

myadd(99,23),这个时候函数的值就是99+23了,如果把结果保存在变量d中,可以写成

d=myadd(99,23);

有了函数,我就可以把不同功能的代码组织到一起,不仅自己方便,而且程序特别简单明了,便于修改,其他人写的函数我们还可以直接拿来用。

所以我的这个学生信息管理系统形式就非常简单了,一共用到了三个函数

int main()

{

inti,sum;

pagedis();

check();

menu();

}

第一个是显示欢迎页面,第二个是验证用户名和口令,第三个是显示菜单,并根据用户的输入选择执行相应的操作。

还有一些其他的函数,分别是menu()菜单函数调用的子函数。

结构话程序后大概的形式就是这样

#include<stdio.h>

void pagedis();

void check();

void menu();

int main()

{

pagedis();

check();

menu();

}

void pagedis(){

printf("我是显示欢迎界面的模块,具体内容还要再完善! \n");

}

void check(){

printf("我是验证用户合法性的模块,具体内容还要再完善! \n");

}

void menu(){

printf("我是引导用户执行各个功能的模块,具体内容还要再完善! \n");

}

这就是结构化程序设计,把功能放到函数中,下一步就可以集中精力,完善函数中的内容。

学生成绩管理系统:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#define SIZE 3 /*定义常量SIZE便于以后的修改*/

struct student /*定义一个结构体数组存放学生的信息*/

{

int number; /*学号*/

char name[20];/*名字*/

char xueyuan[20];/*学院*/

int cla;/*班级*/

int score[3];/*分数*/

int sum;/*总分*/

int average;/*平均分*/

}stu[SIZE];

void menu();/*调用菜单函数*/

void write();/*读入信息*/

void save(int x);/*保存stud.dat文件函数*/

void SaveOneStudent(int i);/*保存一个学生信息*/

void SaveAllStudent(int n);/*保存全部学生信息*/

void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/

void save2();/*将排序后的信息存入student.dat文件中*/

int AddStudent(int n);/*增加学生信息*/

void InputOnestudent(int i);/*输入一个同学信息*/

int DelStudent(int n);/*删除学生信息*/

void ModifyStudent(int n);/*修改学生信息*/

void OutputOneStudent(int i);/*查询一个学生信息*/

void SearchMenu(int n);/*查询学生信息操作*/

void SearchNumber(int n);/*按学号查询学生信息*/

void SearchName(int n);/*按姓名查询学生信息*/

void SearchXueyuan(int n);/*按所在学院查询学生信息*/

void SearchCla(int n);/*按所在班级查询学生信息*/

void tongji();/*学生信息统计操作*/

void tongji2();/*统计不及格率操作*/

void zfsc();/*总分排序操作*/

void avecz();/*按平均分统计人数操作*/

void avecz();/*按平均分统计人数操作*/

void search();/*查找最高成绩操作*/

void tongji2();/*统计不及格率操作*/

void read();/*读取student.dat文件文件中学生的信息*/

/*主函数************************************************************************************/

void main()

{

int n=SIZE;

int choice;/*用户选择变量*/

printf("*******************************************************************************\n");

printf("*                                                                             *\n");

printf("*          Hwadee            &学生成绩文件管理&          Hwadee               *\n");

printf("*                                                                             *\n");

printf("*******************************************************************************\n\n\n");

printf("******************************●●欢迎使用●●*********************************");

while (1)

{

menu();/*调用菜单函数形成操作界面*/

printf("请选择:");

scanf("%d", &choice);

if ( choice==0 )

{

printf("\t\t\t\t谢谢使用!!!");

break;

}

switch(choice) /*多重选择实现功能不同的功能*/

{

case 1:

write();

inturn(stu);

save(SIZE);

break;

case 2:

AddStudent(n);

break;

case 3:

DelStudent(n);

break;

case 4:

ModifyStudent(n);

break;

case 5:

SearchMenu(n);

break;

case 6:

tongji();

break;

case 0:

printf("\n谢谢使用!再见!\n");

default:

printf("\n按键错误!请重新选择!\n");

}/*结束switch*/

}/*结束while*/

}

部分程序清单

/*菜单函数*************************************************************************************/

void menu()

{

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");

}

/*写入函数*************************************************************************************/

void write()

{

int i;/*计数变量*/

for(i=0;i<SIZE;i++)

{

printf("学号:");

scanf("%d",&stu[i].number);

printf("姓名:");

scanf("%s",&stu[i].number);

printf("学院:");

scanf("%s",&stu[i].xueyuan);

printf("班级:");

scanf("%d",&stu[i].cla);

printf("高数:");

scanf("%d",&stu[i].score[0]);

printf("英语:");

scanf("%d",&stu[i].score[1]);

printf("C语言:");

scanf("%d",&stu[i].score[2]);

stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*计算总成绩*/

printf("总成绩:%d",stu[i].sum);

stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*计算平均成绩*/

printf("平均成绩:%d\n",stu[i].average);

}

}

150206321

通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统

时间: 2024-10-27 04:03:14

C语言程序设计(二)的相关文章

现代C语言程序设计之数据存储(二)

现代C语言程序设计之数据存储(二) C语言 2.5 原码.反码.补码的计算   原码 反码 补码 +7 00000111 00000111 00000111 -7 10000111 11111000 11111001 +0 00000000 00000000 00000000 -0 10000000 11111111 00000000 数的取值范围 -127-127 -127-127 -128-127 从上面的表格可以看出,正数的原码.反码和补码都相同,而负数的补码就是原码取反(最高位不变,其他

Java语言程序设计 上机实验5 异常

Java语言程序设计 上机实验5 实验目的: 理解异常的概念,掌握Java的异常处理机制.常见异常的捕获方法.自定义异常及其抛出和捕获方法. 实验内容: 常见异常的捕获: 编写一个程序,分别生成ArrayIndexOutOfBoundsException类型和NumberFormatException类型的异常:然后改写程序,对这两种类型的异常进行捕获并合理地处理. 另外,思考并回答问题:能否0同时抛出ArrayIndexOutOfBoundsException类型和NumberFormatEx

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断

嵌入式linux C++语言(二)——C++对C语言基础语法的扩展

嵌入式linux C++语言(二)--C++对C语言基础语法的扩展 C++是基于C语言扩展发展而来的面向对象的程序设计语言,本文将主要讨论C++语言基于C语言扩展的方面. 一.类型增强 1.类型检查更严格 在C语言中: const int a = 100; int *p = &a; 在C++语言中: const int a = 100;//必须在定义的时候初始化 const int *p = &a; 在C++语言中不能隐式转换数据类型. error: invalid conversion

《VB语言程序设计(第3版)》总结

我之前因学习昆仑通态的组态软件MCGS,用并学习过VB,还买了一本书<VB语言程序设计(第3版)>.现在在某公司实习,最近接触老的项目,又要用到VB.我就又把那本书大体看了一遍,并对其进行了总结.之所以总结这个,主要是书太多了,想把那本书丢了,呵呵,但又得留下点东西吧. 下面一张图概括了VB的大部分基础知识点,看了这个图基本就不用看书了,哈哈. 我学习VB主要是在VB6.0的环境下学习的.下面介绍一下VB的一些基本语句. (1)声明语句 Dim score As Integer, temp A

java语言程序设计(一)-2

(一)jdk安装及环境变量配置 1.jdk下载 下载地址http://www.oracle.com/technetwork/java/javase/downloads/index.html,下载SE标准企业版本,当前已经更新到1.8.X版本了,但是最新版本不支持XP系统,已被验证(无法在xp系统中安装),于是选择1.7版本. 2.环境变量配置 配置path和classpath路径,我的电脑->属性->高级->环境变量,在用户变量中添加java的安装路径,在path中添加bin路径,在cl

C语言程序设计入门学习五步曲(转发)

笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的语法知识,而我们编写的程序或软件是要根据要解决问题的实际需要控制程序的流程,如果你没有深刻地理解C语言的语句的执行过程(或流程),你怎么会编写程序解决这些实际问题呢? 二.用C语言编程解决实际问题,所需要的不仅仅是C语言的编程知识,还需要相关的专业知识.例如,如果你不知道长方形的面积公式,即使C语言

Java语言程序设计期中考试试题

Java语言程序设计期中考试试题 一.编程题 1. 抽象类 创建闭合图形抽象类(ClosedFigure),定义抽象方法计算面积:创建继承平面图形抽象类的两个子类椭圆(Ellipse)和矩形(Rectangle),在子类中实现计算图形面积的方法.设计测试类Test1进行相应的测试,根据不同类型的平面图形进行相应的面积计算.(30分) 提示:根据椭圆第一定义,用a表示椭圆长半轴的长,b表示椭圆短半轴的长,且a>b>0, 椭圆面积公式:L=πab 2.接口 创建接口Speakable和Runer,

《go语言程序设计》学习(一)

序言 2年前的这个时候认识到了golang,然后兴匆匆的去书店买了本书,go语言,云动力吧好像是,结果拿过来一开始,环境就设置不上,折腾了几天,然后就不了了之了. 1年前的这个时候,再次路过书店,看到了<go语言程序设计>这本书,按耐不住心痒痒,又买回来,结果看了两章,又头昏脑胀,没坚持下去. 前几天看很多人都在讨论golang,我就又去把书翻出来了,这次决定要再前进一步,争取把书看完. (一个拖延症的懒癌患者的内心,是咆哮的) 一,示例代码:gobook已下载 二,开发环境:go 1.4,v

【C语言】二维指针做形参

转自:http://hi.baidu.com/gpmzccqceabimqq/item/f499f057aa1520404eff208b 关键: 传入时强制类型转换 + 使用时自己手工寻址 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间. 正文: 首先,我引用了谭浩强先生编著的<C程序设计>上面的一节原文,它简要介绍了如