写学生管理系统的收获

学生管理系统:

一:遇到的问题+收获的小知识点:

一:改变窗口的大小和颜色: 

*system函数的头文件#include <stdlib.h>

*system("color 颜色参数")

改变屏幕窗口的背景色和文字颜色。颜色属性由两个十六进制数字指定 -- 第一个为背景色,第二个则为文字颜色。每个数字可以为以下任何值之一:

0 = 黑色
1 = 蓝色
2 = 绿色
3 = 浅绿色
4 = 红色
5 = 紫色
6 = 黄色
7 = 白色
8 = 灰色
9 = 淡蓝色
A = 淡绿色
B = 淡浅绿色
C = 淡红色
D = 淡紫色
E = 淡黄色
F = 亮白色

  如:添加代码 system("color 9F"),可以将屏幕窗口背景色设置为蓝色,文字颜色设置为白色。

       注意:(1)如果只给定一个参数,则只设置背景色。如:system("color 9"),背景色为蓝色,文字颜色不变。

                  (2)如果没有给定任何参数,如:system("color"),该命令会将颜色还原到 CMD.EXE 启动时的默认颜色。

*修改窗口的大小

在Window32下:
system("mode con cols=30 lines=20");
里面的数字可以改:
char stCmd[128];
sprintf("mode con cols=%d lines=%d", height, width);
system(stCmd);

二:sprinf函数

  1. 函数原型:

    int sprintf( char *buffer, const char *format, [ argument] … );

    这个函数包含三个部分的参数:

    buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。即可选参数的想要输入的数据类型。[argument]...:可选参数,可以是任何类型的数据。

    在C语言中如何使用sprintf()函数?

  2. 功能说明:

    这个函数就是把第三部分的数据,按照第二部分格式化字符的格式,把第三部分的数据进行”格式化“,然后在把格式化后的数据类型,存储到字符串的缓存区间里去。

    在C语言中如何使用sprintf()函数?

  3. %m.n格式说明:

    如果按格式%m.n格式输出,若数据长度超出m(加小数点),则按实际长度输出;反之则左补空格(%-m.n右补空格)。

    在C语言中如何使用sprintf()函数?

  4. 整数转化为字符串:

    char str[10];

    sprintf(str ,"%d", 111); //产生"111"

    说明:这个是把111存储到了str数组中,存储为“111”

    在C语言中如何使用sprintf()函数?

  5. 两个整数组合成一个字符串:

    char str[10];

    sprintf(str,"%4d%4d", 123,4567); //产生:“  1234567"

    说明:把整数123 整数4567 打印成一个字符串保存在str 中。不足的左边补空格

    在C语言中如何使用sprintf()函数?

  6. 两个整数转化为带小数的字符串:

    char str[10];

    sprintf(str,"%d%cf%d", 1,'.',345); //产生:1.345

    说明:两个整数形成带小数点的字符串,极大的方便了不支持做浮点运算,且需要小数点时。

    在C语言中如何使用sprintf()函数?

  7. 浮点型转化为字符串:

    char str[10];

    sprintf(str,"%4.2f", 1234.244); //产生:“1234.24“

    说明:一个浮点型数据形成浮点型字符串

    在C语言中如何使用sprintf()函数?

  8. 多种数据融合:

    char str[10];

    sprintf(str,"%4.2f%s", 1234.244,"cm"); //产生:“1234.24cm”

    说明:一个浮点型数据形成浮点型字符串,后添加单位。

    在C语言中如何使用sprintf()函数?

三:
1:char类型的数组名作为指针不能偏移:

2:全局变量写进了头文件里面!

编译的时候会shu说出现重定义,不如在.c文件中使用一个变量,然后在另一个.c文件中用extern声明。

3:typedef容易错误 int*p,q;

和int *p,*q;尤其是使用typedef的时候

四:文件:
1:有bug  读取文件后,用wb打开,如果这个时候关掉程序,后面的信息就没有传进文件里面,这个时候文件就会被清空。或者用rb打开的时候,关掉文件

 在使用完一个文件后应该关闭它,这应该成为一个习惯。如果不关闭文件,可能会丢失数据。因为在向文件写数据时,实现将数据输到缓冲区,待缓冲区充满后才正式输出给文件,如果当数据未充满缓冲区而程序结束运行,就会将缓冲区中的数据丢失。用fclose函数关闭文件,他先将缓冲区中的数据输出到磁盘文件然后才释放文件指针变量,从而避免了数据丢失。

2:文件指针在文件中的位置要控制好,另外a ab也是可以打开一个新的文件的

***第五版的课本有问题

3:关于feof()函数  

读完所需要的内容并不是结束,还有一个'\0'呢,所以会多读一次。所以想知道几个结构体,用fseek将指针定到文件最后,然后ftell(fp)/sizeof(结构体)

4:fread出现错误的原因:
1:打开方式错误

2:文件指针指向NIULL
3:buffer的内存小于需要读取的内存

五:有关缓冲区的问题
1:这个输入的是一个字母的时候会重复打印 printf函数里面的内容.

while(1)
	{
		
		int t;
		scanf("%d",&t);
		if(0==t)
		{
			return;
		}
		if(1==t)//按x学号查找 
		{
			f3_1();
		}
		if(2==t)//按姓名查找 
		{
			f3_2();
		}
		printf("请重新输入正确的操作:\n");
	}

解决的方法,在scanf之前清空缓冲区,或者将t换成char类型的数据.

2:清空缓冲区的函数:

头文件:#include<stdio.h>

fflush()不是标准库文件,经笔者测试,VC6.0完美支持,GCC(GCC4.6.2)不支持。

fflush()用于清空文件缓冲区,如果文件是以写的方式打开 的,则把缓冲区内容写入文件。其原型为:
    int fflush(FILE* stream);

【参数】stream为文件指针。

【返回值】成功返回0,失败返回EOF,错误代码存于errno 中。指定的流没有缓冲区或者只读打开时也返回0值。

fflush()也可用于标准输入(stdin)和标准输出(stdout),用来清空标准输入输出缓冲区。

stdin 是 standard input 的缩写,即标准输入,一般是指键盘;标准输入缓冲区即是用来暂存从键盘输入的内容的缓冲区。stdout 是 standard output 的缩写,即标准输出,一般是指显示器;标准输出缓冲区即是用来暂存将要显示的内容的缓冲区。

六:输出对齐

%5s %-5s如此如此

13:结构体里面有很多成员,通过字符串的形式输入成员的名字,来决定对某个成员进行操作。不过对每一个成员的操作是大致相同的,这个时候可以使用switch case。就是重复部分的代码就公用,一遇到需要访问确定的成员de的时候可以,进行一个选择。

七:经验
1:尽量少使用全局变量!自己定义的函数服务的对象不能只是全局变量变量,最好有参数的传入。

其实这个程序,就是最好的体现。当所有的函数都是服务于全局变量那个指针指向的链表。再想创建一个链表来使用这些函数就会非常困难,要让自己的函数具有pu's普适性。这个程序可以通过free(head) 再来重新建立链表.,但是不能解决同一分数按照名字排序

**然后我想到了在录入信息的时候直接对名字进行排序。但发现需要修改的东西太多,而且这样会让函数的每一个函数的功能变得不单一。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值