精华内容
下载资源
问答
  • PAGE 1 实验一文件程序设计 一 实验目的 1. 掌握文件的基本概念 2. 掌握文本文件的打开和关闭操作 3. 掌握文本文件的顺序读写方法 二实验要求 1.编写程序从键盘输入若干实数以特殊数值-1结束分别写到一个文本文件中...
  • 假设文件address.txt中已存放3位联系人信息,编写程序,从键盘输入1位联系人信息,序号:4,姓名:小鹿,性别:女,电话号码:15821889977,把该联系人添加到文件里。然后从文件中读出全部信息,并在屏幕上显示。!...
  • C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计,C语言数组,C语言循环控制,C语言预处理命令,C语言文件操作指针,C语言选择结构程序设计,C语言结构体与共用体,C语言文件操作,C语言函数
  • C语言程序设计

    2015-04-27 16:33:12
    本课“C语言程序设计”系列课程由初步篇、提高篇、进阶篇三部分构成。初步篇介绍基本的数据结构和控制结构;提高篇引入函数和数组,传授模块化设计的方法;进阶篇涉及多文件组织、结构体及复杂数据结构。系列课程...
  • 语言程序设计;第13章 文件;第13章 文件 ;1从用户的角度来看可分为普通文件和设备文件两种;2按文件的编码格式来看文件可分为ASCII文件和二进制文件两种;缓冲文件系统;二文件的的打开;文件使用方式 ;三文件的关闭 ;第...
  • C语言程序设计》主要内容包括C语言程序设计概述、C语言编程元素、选择程序设计、循环程序设计、数组程序设计、指针程序设计、函数程序设计、结构体程序设计文件C语言调试等。《C语言程序设计》适用于电子信息...

    《C语言程序设计》是以实现一个完整的企业项目——学生成绩管理系统为载体展开的,主要实现录入、查询、统计、管理和保存等功能。《C语言程序设计》主要内容包括C语言程序设计概述、C语言编程元素、选择程序设计、循环程序设计、数组程序设计、指针程序设计、函数程序设计、结构体程序设计、文件、C语言调试等。

    《C语言程序设计》适用于电子信息工程、计算机科学与技术及其相关专业应用型本科学生,也适用于C语言程序设计的初学者或以C语言为工作对象的工程技术人员;高职教育的相关专业的学生也可以通过内容的删减达到C语言学习的目的。

    更多科学出版社服务,请扫码获取。

    目录

    前言

    第1章C语言程序设计概述1

    1.1C语言概述1

    1.1.1C语言的起源和发展1

    1.1.2C语言的特点2

    1.1.3C程序的基本结构3

    1.2程序设计5

    1.2.1算法5

    1.2.2算法的描述方法8

    1.2.3从算法到程序12

    1.3开发C程序的步骤14

    1.4执行C程序18

    1.4.1C语言开发环境18

    1.4.2解释与编译18

    1.4.3编辑、编译、链接和执行C程序18

    习题23

    第2章C语言编程元素24

    2.1数据类型24

    2.1.1什么是数据类型24

    2.1.2为何有数据类型之分25

    2.1.3数据类型的种类25

    2.2常量26

    2.2.1常量的定义26

    2.2.2特殊常量26

    2.2.3应用常量编程28

    2.3变量28

    2.3.1理解变量28

    2.3.2变量的类型及定义29

    2.3.3变量的使用原则30

    2.4各类数值型数据间的转换30

    2.4.1隐式类型转换30

    2.4.2显式类型转换31

    2.5运算符和表达式31

    2.5.1算术运算符和算术表达式31

    2.5.2赋值运算符和赋值表达式33

    2.5.3关系运算符和关系表达式33

    2.5.4逻辑运算符和逻辑表达式34

    2.5.5运算符优先级总结34

    2.5.6应用运算符和表达式编程35

    2.6输入输出语句36

    2.6.1格式化输出函数printf()36

    2.6.2格式化输入函数scanf()41

    2.6.3字符输入和输出函数43

    2.6.4应用输入和输出语句编程44

    2.7构造数据类型45

    2.7.1数组45

    2.7.2结构体46

    2.8函数48

    2.8.1模块化程序设计49

    2.8.2函数定义的四个要素49

    2.8.3函数的调用50

    2.8.4函数的参数50

    2.9C语言的语句51

    2.10预处理命令51

    2.10.1宏定义51

    2.10.2文件包含52

    习题53

    第3章选择程序设计55

    3.1选择结构55

    3.1.1C语言的选择语句56

    3.1.2选择语句的引入57

    3.1.3选择语句编程要素58

    3.2if语句59

    3.2.1if语句格式59

    3.2.2if语句执行过程60

    3.2.3应用if语句编程62

    3.3嵌套if语句65

    3.3.1多重if-else结构67

    3.3.2if语句的多种嵌套形式71

    3.4条件运算符74

    3.4.1条件运算符的语句格式74

    3.4.2条件运算符的运算优先级75

    3.4.3条件运算符与if-else语句比较75

    3.5switch语句76

    3.5.1switch语句的格式77

    3.5.2switch语句的执行过程77

    3.5.3switch语句编程要素80

    3.5.4应用switch结构编程83

    习题86

    第4章循环程序设计88

    4.1循环控制语句88

    4.1.1C语言的循环语句89

    4.1.2循环的引入90

    4.1.3应用循环结构编程的要素91

    4.2while循环语句93

    4.2.1while循环语句格式93

    4.2.2while循环语句的执行过程94

    4.2.3应用while循环编程的要素95

    4.2.4应用while循环编程96

    4.3do-while循环语句97

    4.3.1do-while循环语句的格式98

    4.3.2do-while话句的执行过程98

    4.3.3应用do-while循环编程100

    4.4for循环语句102

    4.4.1for循环语句格式102

    4.4.2for循环语句的执行过程103

    4.4.3使用for循环编程的要素105

    4.4.4应用for循环编程106

    4.5三种循环语句的比较109

    4.6循环嵌套110

    4.6.1循环嵌套111

    4.6.2循环嵌套的合法形式112

    4.6.3应用循环嵌套编程的要素114

    4.6.4应用循环嵌套编程117

    4.7循环跳转语句119

    4.7.1continue语句120

    4.7.2break语句121

    4.7.3continue和break语句的区别122

    4.8循环程序设计应用实例123

    4.9循环优化129

    习题131

    第5章数组程序设计133

    5.1数组数据类型133

    5.1.1引入数组134

    5.1.2数组的种类136

    5.1.3数组编程要素137

    5.2一维数组138

    5.2.1定义一维数组139

    5.2.2初始化一维数组139

    5.2.3应用一维数组141

    5.3二维数组142

    5.3.1定义二维数组143

    5.3.2初始化二维数组144

    5.3.3应用二维数组145

    5.4字符数组148

    5.4.1初始化字符数组149

    5.4.2字符数组的输入和输出151

    5.4.3字符串处理函数153

    5.4.4应用字符数组156

    5.5数组与循环158

    习题168

    第6章指针程序设计170

    6.1什么是指针170

    6.1.1引入指针170

    6.1.2理解指针171

    6.2指向变量的指针171

    6.2.1指针变量的定义171

    6.2.2指针变量的引用172

    6.2.3应用指针变量173

    6.3指向一维数组的指针176

    6.3.1指向一维数组元素的指针的定义176

    6.3.2通过指针引用一维数组元素177

    6.3.3应用指向一维数组元素的指针179

    6.4指向二维数组的指针180

    6.4.1通过指针访问二维数组180

    6.4.2二维数组的地址表示方法181

    6.4.3维数组指针访问二维数组181

    6.5指针与字符串182

    6.5.1字符指针的定义182

    6.5.2应用字符指针184

    习题187

    第7章函数程序设计188

    7.1引入函数188

    7.2理解函数191

    7.2.1函数的概念191

    7.2.2函数的结构192

    7.2.3函数的定义193

    7.3调用函数196

    7.3.1函数的调用方法196

    7.3.2函数的嵌套调用199

    7.3.3参数的传递方式202

    7.3.4函数原型206

    7.4递归调用207

    7.4.1认识递归207

    7.4.2递归调用编程要点209

    7.4.3递归编程210

    7.5函数中的变量213

    7.5.1变量的作用域及类型213

    7.5.2变量的存储类型215

    7.6函数的程序设计方法220

    7.6.1函数功能分解220

    7.6.2设计函数问传递的参数221

    7.6.3函数实现方法222

    7.7函数应用224

    习题229

    第8章结构体程序设计230

    8.1结构体数据类型230

    8.1.1引入结构体231

    8.1.2结构体类型变量的定义和使用233

    8.1.3结构体类型变量的赋值和初始化234

    8.1.4结构体类型变量之成员变量的访问234

    8.2结构体与函数调用236

    8.2.1结构体类型变量地址作实参236

    8.2.2结构体类型变量的成员作实参237

    8.2.3结构体类型变量作实参239

    8.3结构体数组及应用240

    8.4结构体数组与指针243

    8.5结构体编程应用实例254

    8.6结构体程序相关技巧265

    8.7共用体数据类型266

    8.7.1引入共用体266

    8.7.2共用体类型的定义267

    8.7.3共用体类型变量的定义267

    8.7.4共用体类型变量的引用268

    8.7.5共用体类型变量的应用268

    8.8枚举数据类型270

    8.8.1引入枚举270

    8.8.2枚举类型的声明270

    8.8.3枚举类型变量的定义271

    8.8.4枚举类型变量的使用271

    习题272

    第9章文件274

    9.1文件的基本概念274

    9.1.1文件的定义275

    9.1.2文件类型指针275

    9.2打开和关闭文件276

    9.2.1打开文件276

    9.2.2关闭文件277

    9.3以字符形式读写文件数据278

    9.3.1写字符函数fputc()278

    9.3.2读字符函数电fgetc()278

    9.3.3判断文件尾函数feof()279

    9.3.4以字符形式读写文件编程280

    9.4以数据块形式读写文件282

    9.4.1写数据块函数fwrite282

    9.4.2读数据块函数fread()283

    9.5以格式读写文件284

    9.5.1写格式函数fprintf()285

    9.5.2读格式函数fscanf()286

    9.6以字符串形式读写文件287

    9.6.1写字符串函数fputs()287

    9.6.2读字符串函数fgets()288

    9.6.3出错检测函数ferror()289

    9.7随机访问数据文件289

    9.7.1随机定位函数fseek()290

    9.7.2测试当前位置函数ftell()291

    9.7.3文件头定位函数rewind()292

    9.8应用文件函数编程293

    习题299

    第10章C语言调试301

    10.1调试的定义301

    10.1.1C语言的BUG306

    10.1.2断点308

    10.2单步调试309

    10.2.1查看变量的内容309

    10.2.2单步跟踪312

    10.2.3F7和F8的区别314

    10.3C语言编译警告类型的解决方法315

    10.4编写易于调试的代码318

    10.4.1编程风格318

    10.4.2借势C++319

    参考文献322

    附录323

    附录1C语言的32个关键字及其含义323

    附录2C语言编程元素及其适用场合324

    附录3常用字符与ASCII码的对照表327

    附录4常用键盘ASCII码对照328

    附录5C语言运算符及优先级330

    附录6C语言的库函数332

    附录7常见的编程错误338

    展开全文
  • C语言程序设计》实践项目——用文件输入输出初步-附件资源
  • 程序设计相关的C语言文件.txt
  • C语言全套资料 C语言程序设计 C语言算法 C语言课件 C语言顺序程序设计 C语言数组 C语言循环控制 C语言预处理命令 C语言文件操作指针 C语言选择结构程序设计 C语言结构体与共用体 C语言文件操作 C语言函数 ...
  • 程序设计面向的问题 许多常见问题通过软件解决了。 而比如打印九九乘法表、图形变换、文件压缩、求和问题、排序问题、数列问题等这种小问题,用程序解决。一切可计算问题都可以用程序解决 程序设计的五个步骤 确定...

    程序设计面向的问题

    许多常见问题通过软件解决了。

    而比如打印九九乘法表、图形变换、文件压缩、求和问题、排序问题、数列问题等这种小问题,用程序解决。一切可计算问题都可以用程序解决

    程序设计的五个步骤

    • 确定问题可计算;
    • 建立问题的数学模型;
    • 设计算法和数据结构;
    • 选择合适的计算机语言编写程序;
    • 调试运行程序分析结果

    计算

    • 什么是计算

      从一个按规则组织的符号集合开始,再按照既定的规则一步步地改变这些符号集合,经过有限步骤之后得到一个确定的结果。

    • 可计算与不可计算

      输入参数和输出参数的对应关系是明确的

    • 计算复杂性

      从时间复杂度和空间复杂度两个方面度量

    算法

    • 什么是算法

      有穷规则的集合

    • 算法的特性

      - 有穷性:有限步骤
      - 确定性:含义确切
      - 有效性:有效执行
      - 有零个或多个输入
      - 有一个或多个输出
      
    • 算法描述方法

      - 自然语言
      - 程序语言
      - 流程图:顺序结构、条件结构、循环结构
      - N-S图
      - PAD图
      - 伪代码
      

    程序设计方法

    • 程序设计风格:

      - 正确性:正确实现功能
      - 易读性:易于阅读和理解、便于调试、修改和扩充
      - 健壮性:算法的对交互和环境的反应或处理能力。正确的输入有正确的结果,不正确的输入有相应的提示
      - 高效率:达到所需要的时空性能
      
    • 良好的设计风格应该是:

      - 源程序文档化:有意义的符号名如FindRoot;采用缩进格式...
      - 数据说明标准化:顺序;同类数据排序;对重要数据进行注释
      - 语句规范化:避免使用临时变量;尽量使用库函数;公共函数使用括号;避免二义性...
      - 输入输出格式化:格式简单;对输入数据要进行检验;对输入数据给出必要的提示;输入风格要一致;注释
      
    • 结构化程序设计的特征:

      - 模块化结构;
      - 以三种基本结构的组合来描述程序
      - 有限制地使用转移语句;
      - 每个结构只有一个入口,一个出口;
      - 采用结构化程序设计语言书写程序,并采用一定的书写格式使程序结构清晰,易于阅读;
      

    小结

    程序设计=数据结构+算法+方法

    算法=问题分解+算法表达+程序实现

    程序实现=语言+环境

    展开全文
  • 文件的认知C语言程序设计C语言C语言程序设计文件的认知计算机中的程序解决问题程序为了使用计算机解决某些问题而编写的一系列有序指令的集合C语言C语言程序设计文件的认知程序数据的存储断电丢失计算机内存变量名...
  • C语言程序设计初步例程-42 将数据输出到文本文件

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    贺老师教学链接  C语言及程序设计初步 本课讲解


    文件的操作步骤

    #include <stdio.h>#include <stdlib.h>int main(){    FILE *fp;    int i, d;    fp=fopen("data.txt","w");    if(fp==NULL)    {        printf("File cannot open! " );        exit(0);    }    for(i=0; i<10; i++)    {        scanf("%d", &d);        fprintf(fp,"%d\t", d);    }    fclose(fp);    return 0;}

    实用写文件方式之——格式化输出
    #include <stdio.h>#include <stdlib.h>int main(){    FILE *fp;    int i, No;    float salary;    fp=fopen("data.csv","w");    if(fp==NULL)    {        printf("File cannot open! " );        exit(0);    }    //输入5名员工的工号,并保存到文件中    for(i=0; i<5; i++)    {        scanf("%d %f", &No, &salary);        fprintf(fp,"%d, %.2f\n", No, salary);    }    fclose(fp);    return 0;}

    实用读文件方式之——格式化输入
    #include <stdio.h>#include <stdlib.h>int main(){    FILE *fp;    int i, No;    float salary;    fp=fopen("data.csv","r");    if(fp==NULL)    {        printf("File cannot open! " );        exit(0);    }    //输入5名员工的工号,并保存到文件中    for(i=0; i<5; i++)    {        fscanf(fp, "%d,%f", &No, &salary);        printf("%d\t%.2f\n", No, salary);    }    fclose(fp);    return 0;}

    实用写文件方式之——将字符写入文件
    #include <stdio.h>#include <stdlib.h>int main(){    FILE *fp;    char c;    if ((fp=fopen( "data.dat" , "w" ))==NULL)    {        printf("File cannot open!");        exit(0);    }    while((c=getchar())!=EOF )        fputc(c,fp );    fclose(fp);    return 0;}

    实用读文件方式之——从文件中读取字符
    #include <stdio.h>#include <stdlib.h>int main(){    FILE *fp;    char c;    if ((fp=fopen( "data.dat" , "r" ))==NULL)    {        printf("File cannot open!");        exit(0);    }    while((c=fgetc(fp))!=EOF)        putchar(c);    fclose(fp);    return 0;}


               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • c语言程序设计基础文件
  • * *
  • 贺老师教学链接 C语言程序设计进阶 本课讲解演示:建立多文件的项目main.c#include int max(int x,int y); int main( ) { int a,b,c; printf("输入两数:"); scanf("%d %d", &a, &b); c=max(a,b); printf...

    贺老师教学链接  C语言及程序设计进阶 本课讲解


    演示:建立多文件的项目
    main.c

    #include <stdio.h>
    int max(int x,int y);
    int main( )
    {
    	int a,b,c;
    	printf("输入两数:");
    	scanf("%d %d", &a, &b);
    	c=max(a,b);   
    	printf("max=%d\n", c);
    	return 0;
    }
    

    max.c
    int max(int x,int y) 
    {
       int z;
       z=x>y?x:y;
       return(z);
    }
    


    演示:银行储蓄系统
    main.c

    #include <stdio.h>
    #include "bank.h"
    /*主函数:*/
    int main()
    {
        printf("+----------------------+\n");
        printf("+    欢迎光临CSDN银行  +\n");
        printf("+----------------------+\n");
        if (pass())
        {
            readData();
            work();
            writeData();
        }
        return 0;
    }
    

    bank.h
    #ifndef BANK_H_INCLUDED
    #define BANK_H_INCLUDED
    
    
    #define upNum 2000 //系统最多容纳的用户数
    
    
    int user[upNum][3];  //账号、密码、状态
    char name[upNum][10];   //用户名
    double balance[upNum];  //账户余额
    //以上相同行下标,描述同一人的信息
    int N;  //实际的用户数目
    
    
    int pass();  //业务员登录
    void readData();  //开始前从文件中读数据,存在数组中
    void writeData();   //程序结束前,将数组中的数据写入到文件中
    void work();  //业务驱动
    int chooseInMenu(); //显示菜单并由业务员选择
    void openAccount(); //开户
    void cancelAccount();  //注销账户
    void save();   //存款
    void withdraw();   //取款
    void showAccount(); //查询余额
    void transferAccounts();  //转账
    void reportLoss();  //挂失
    void cancelLoss();  //解除挂失
    void updatePassword();   //更改密码
    int inputPassword();   //返回键盘输入的密码
    int search(int);  //根据账号找到用户数据对应的下标
    
    
    
    
    #endif // BANK_H_INCLUDED
    

    bank.c
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
    
    
    #include "bank.h"
    /*
    功能:验证用户密码
    返回值:密码正确,返回1;
            不能通过密码验证,返回0
    */
    int pass()
    {
        char sNameInFile[20];   //由文件中读出的业务员用户名
        char sPassInFile[20];  //文件中保存的密码,这一版本中,用字符保存密码
        char sName[20];   //业务员登录时输入的用户名
        char sPass[20];  //业务员登录时输入的密码
        char ch;
        int iTry=3;   //进入系统时尝试的次数
        int right = 0;  //要返回的结果:0-不正确 1-正确
        FILE *fp;  //用于文件操作
        //密码保存在文件中,先取出
        if ((fp=fopen("password.txt", "r"))==NULL)
        {
            printf("password file cannot open!");
            exit(0);
        }
        fscanf(fp, "%s %s", sNameInFile, sPassInFile);  //从文件中读业务员用户名和密码密码
        fclose(fp);
    
    
        //进入系统,密码三次不对将退出
        do
        {
            printf("请输入业务员用户名:");
            scanf("%s", sName);
            printf("请输入密码:");
            int i=0;
            while((ch=getch())!='\r')  //getch在接受输入后,不在屏幕上显示
            {
                sPass[i++]=ch;
                putchar('*');   //接受任何字符,屏幕上只显示*
            }
            sPass[i]='\0';
            fflush(stdin);
            printf("\n");
            if(strcmp(sPass,sPassInFile)==0&&strcmp(sName,sNameInFile)==0)
            {
                right = 1;
                break;
            }
            else
            {
                iTry--;
                if(iTry>0)
                    printf("超过3次将退出,你还可以尝试%d次!\n", iTry);
                else
                {
                    printf("对不起,你不能进入系统\n");
                }
            }
        }
        while(iTry);
        return right;
    }
    
    
    /*
    关于getch()的一点说明:
    所在头文件:conio.h
    函数用途:从控制台读取一个字符,但不显示在屏幕上
    函数原型:int getch(void)
    返回值:读取的字符
    在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
    1)windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。
    2)unix、 linux系统中ENTER键只产生 \n ,因此getch返回10(\n)。
    3)MAC OS中ENTER键将产生 \r ,因此getch返回13(\r)。
    为避免键盘缓存区中未读出的字符影响程序,用fflush(stdin);清除输入缓存区
    */
    
    
    /*
    功能:办理业务
    */
    void work()
    {
        int iChoice;   //用于选择系统功能
        //办理业务
        do
        {
            iChoice = chooseInMenu();  //从菜单中获得功能代码
            switch(iChoice)
            {
            case 1:
                openAccount(); //开户
                break;
            case 2:
                cancelAccount();  //注销账户
                break;
            case 3:
                save();  //存款
                break;
            case 4:
                withdraw();   //取款
                break;
            case 5:
                showAccount(); //查询余额
                break;
            case 6:
                transferAccounts();  //转账
                break;
            case 7:
                reportLoss();  //挂失
                break;
            case 8:
                cancelLoss();  //解除挂失
                break;
            case 9:
                updatePassword();   //更改密码
                break;
            case 0:
                printf("欢迎您再来. \n");
            }
        }
        while(iChoice);
    }
    
    
    /*
    功能:从文件中读取储户数据
    */
    void readData()
    {
        FILE *fp;  //用于文件操作
        int i = 0;
        //从文件中取出余额
        if ((fp=fopen("account.dat", "r"))==NULL)
        {
            printf("data file cannot open!");
            exit(0);
        }
        while(fscanf(fp,"%d %s %d %lf %d",&user[i][0], name[i], &user[i][1], &balance[i],&user[i][2] ) != EOF)
        {
            i++;
        }
        N = i; //用全局变量存储用户的总人数
        fclose(fp);
        return;
    }
    
    
    /*
    功能:将用户数据保存到文件中
    */
    void writeData()
    {
        FILE *fp;  //用于文件操作
        int i=0;
        //保存余额
        if ((fp=fopen("account.dat", "w"))==NULL)
        {
            printf("data file cannot open!");
            exit(0);
        }
        for(i=0; i<N; i++)
            fprintf(fp,"%d %s %d %f %d\n",user[i][0], name[i], user[i][1], balance[i],user[i][2]);
        fclose(fp);
    }
    
    
    /*
    功能:显示菜单并由业务员选择
    返回值:用户选择的功能,范围0-9
    */
    int chooseInMenu()
    {
        int i;
        while(1)
        {
            printf("\n");
            printf("+----------------------------+\n");
            printf("+ 1 开户    2 销户    3 存款 +\n");
            printf("+ 4 取款    5 查询    6 转账 +\n");
            printf("+ 7 挂失    8 解挂    9 改密 +\n");
            printf("+                     0 退出 +\n");
            printf("+----------------------------+\n");
            printf("请输入操作指令:");
            scanf("%d", &i);
            if(i>=0 && i<=9)
                break;
            else
                printf("请重新选择功能\n\n");
        }
        return i;
    }
    
    
    /*
    功能:开户
    说明:在进入系统时,在读入数据过程中,已经记录了用户数为N,在数组中对应下标为0~N-1
      开户时要增加一个用户,只要为下标为N的数组元素置值,并在成功之后令N++即可。
      这样做顺序增加简单,但遗留的后患是,在查询账户时,不得不用顺序查找,这在效率上是不划算的。
      改进的手段(1):开户时,根据账号,将数据插入到数组中,使按账号有序,这样做插入时麻烦,但有利于以后要频繁的查询操作
      改进的手段(2):账号由系统自动生成,保证其连续,这样在顺序增加的时候,就保证了其有序。
    */
    void openAccount()
    {
        if(N==upNum)
        {
            printf("银行用户数已经达到上限,不能再开户");
            return;
        }
        //下面正常办理开户业务
        printf("正在开户\n");
        printf("账号:");
        scanf("%d", &user[N][0]);
        printf("户主姓名:");
        scanf("%s", name[N]);
        int iPass1, iPass2;
        printf("密码:");
        iPass1=inputPassword();  //输入密码1
        printf("确认密码:");
        iPass2=inputPassword();  //输入密码2
        if(iPass1==iPass2)
        {
            user[N][1]=iPass1;
            user[N][2]=0; //账户状态为“正常”
            printf("存入金额:");
            scanf("%lf", &balance[N]);
            N++; //正式用户数增加1,确认了新用户已经加入
            printf("成功开户!\n");
        }
        else
        {
            printf("两次密码不一致,未成功开户!\n"); //没有N++,则读入的值无效
        }
    }
    
    
    /*
    功能:注销账户
    说明:找到账户,并将其状态改为2-注销即可。
    注销前应该检查余额,应该先取款再注销
    */
    void cancelAccount()
    {
        int id;   //用于输入的账号
        int who;  //查找到该账号在数组中对应的下标
        int iPass;
        printf("待销户账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,销户失败!\n");
        }
        else
        {
            printf("户主姓名:%s\n", name[who]);
            printf("密码:");
            iPass=inputPassword();
            if(iPass==user[who][1])
            {
                printf("余额:%.2f 元\n", balance[who]);
                printf("确认销户(y/n)?");
                if(tolower(getchar())=='y')
                {
                    balance[who]=0;  //取款后余额变0
                    user[who][2]=2;  //状态变为注销
                    printf("取款 %.2f 元,销户成功!\n", balance[who]);
                }
                else
                {
                    printf("你取消了操作,销户失败!\n");
                }
                fflush(stdin);  //清除了getchar()时在键盘缓存中的遗留,以免影响后续操作
            }
            else
            {
                printf("输入的密码错误,销户失败!\n");
            }
        }
    }
    
    
    /*
    功能:存款
    说明:需要保证账户存在,且处于正常状态
    */
    void save()
    {
        int id, who;
        double money;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,存款失败!\n");
        }
        else
        {
            if(user[who][2]==0)
            {
                printf("户主姓名:%s\n", name[who]);
                printf("输入存款额:");
                scanf("%lf", &money);
                balance[who]+=money;
                printf("存款后,您有%.2f元. \n",balance[who]);
            }
            else if(user[who][2]==1)
            {
                printf("该用户处于挂失状态,存款失败!\n");
            }
            else
            {
                printf("该用户已经销户,存款失败!\n");
            }
        }
        return;
    }
    
    
    /*
    功能:取款
    说明:需要保证账户存在,且处于正常状态,另外,余额要足够取
    */
    void withdraw()
    {
        int id, who;
        int iPass;
        double money;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,取款失败!\n");
        }
        else
        {
            if(user[who][2]==0)
            {
                printf("户主姓名:%s\n", name[who]);
                printf("密码:");
                iPass=inputPassword();
                if(iPass!=user[who][1])
                {
                    printf("输入密码错误,取款失败!\n");
                }
                else
                {
                    printf("输入取款额:");
                    scanf("%lf", &money);
                    if(money>balance[who])  //亲,不玩透支
                    {
                        printf("余额不足,取款失败!\n");
                    }
                    else
                    {
                        balance[who]-=money;
                        printf("取款后,还有%.2f元. \n",balance[who]);
                    }
                }
            }
            else if(user[who][2]==1)
            {
                printf("该用户处于挂失状态,取款失败!\n");
            }
            else
            {
                printf("该用户已经销户,取款失败!\n");
            }
        }
        return;
    }
    
    
    /*
    功能:查询账户
    说明:显示账户信息
    */
    void showAccount()
    {
        int id, who;
        int iPass;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,查询完毕!\n");
        }
        else
        {
            printf("户主姓名:%s\n", name[who]);
            printf("密码:");
            iPass=inputPassword();
            if(iPass!=user[who][1])
            {
                printf("输入密码错误,不能继续查询其他信息!\n");
            }
            else
            {
                printf("余额:%.2f元. \n",balance[who]);
                printf("状态:");
                if(user[who][2]==0)
                {
                    printf("正常\n");
                }
                else if(user[who][2]==1)
                {
                    printf("挂失\n");
                }
                else
                {
                    printf("已经销户\n");
                }
            }
        }
        return;
    }
    
    
    /*
    功能:转账
    说明:需要保证两个账户都存在,且处于正常状态,另外,转出账户的余额要足够
    */
    void transferAccounts()
    {
        int id, whoout, whoin;
        int iPass;
        double money;
        printf("输入转出账号:");
        scanf("%d", &id);
        whoout = search(id);  //根据账号查询用户,返回用户的下标
        if(whoout<0)   //说明id账户不存在
        {
            printf("该用户不存在,转账失败!\n");
        }
        else
        {
            if(user[whoout][2]==0)
            {
                printf("户主姓名:%s\n", name[whoout]);
                printf("密码:");
                iPass=inputPassword();
                if(iPass!=user[whoout][1])
                {
                    printf("输入密码错误,转账失败!\n");
                }
                else
                {
                    printf("输入转账金额:");
                    scanf("%lf", &money);
                    if(money>balance[whoout])  //亲,不玩透支
                    {
                        printf("余额不足,转账失败!\n");
                    }
                    else
                    {
                        printf("输入转入账号:");
                        scanf("%d", &id);
                        whoin = search(id);  //根据账号查询用户,返回用户的下标
                        if(whoin<0)
                        {
                            printf("转入账户不存在,转账失败!\n");
                        }
                        else
                        {
                            if(user[whoin][2]>0)
                            {
                                printf("转入账户异常,转账失败!\n");
                            }
                            else
                            {
    
    
                                balance[whoout]-=money;
                                balance[whoin]+=money;
                                printf("取款后,您还有%.2f元. \n",balance[whoout]);
                            }
                        }
                    }
                }
            }
            else
            {
                printf("该账户异常,转账失败!\n");
            }
        }
        return;
    }
    
    
    /*
    功能:挂失账户
    */
    void reportLoss()
    {
        int id, who;
        int iPass;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,不能挂失!\n");
        }
        else
        {
            printf("户主姓名:%s\n", name[who]);
            printf("密码:");
            iPass=inputPassword();
            if(iPass!=user[who][1])
            {
                printf("输入密码错误,不能继续操作!\n");
            }
            else
            {
                if(user[who][2]==0)
                {
                    user[who][2]=1;
                    printf("挂失成功\n");
                }
                else if(user[who][2]==1)
                {
                    printf("该账户已经处于挂失状态\n");
                }
                else
                {
                    printf("该账户已销户,不能挂失\n");
                }
            }
        }
        return;
    }
    
    
    /*
    功能:解除挂失
    */
    void cancelLoss()
    {
        int id, who;
        int iPass;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,解除挂失失败!\n");
        }
        else
        {
            printf("户主姓名:%s\n", name[who]);
            printf("密码:");
            iPass=inputPassword();
            if(iPass!=user[who][1])
            {
                printf("输入密码错误,不能继续操作!\n");
            }
            else
            {
                if(user[who][2]==0)
                {
                    printf("该账户处于正常状态,不需要解除挂失\n");
                }
                else if(user[who][2]==1)
                {
                    user[who][2]=0;
                    printf("解除挂失成功\n");
                }
                else
                {
                    printf("该账户已销户,操作无效\n");
                }
            }
        }
        return;
    }
    
    
    /*
    功能:改密码
    */
    void updatePassword()
    {
        int id, who;
        int iPass, iPass1, iPass2;
        printf("账号:");
        scanf("%d", &id);
        who = search(id);  //根据账号查询用户,返回用户的下标
        if(who<0)   //说明id账户不存在
        {
            printf("该用户不存在,修改密码失败!\n");
        }
        else
        {
            printf("户主姓名:%s\n", name[who]);
            printf("密码:");
            iPass=inputPassword();
            if(iPass!=user[who][1])
            {
                printf("输入密码错误,不能继续操作!\n");
            }
            else
            {
                printf("新密码:");
                iPass1=inputPassword();  //输入密码1
                printf("确认密码:");
                iPass2=inputPassword();  //输入密码2
                if(iPass1==iPass2)
                {
                    user[who][1]=iPass1;
                    printf("修改成功!\n");
                }
                else
                {
                    printf("两次输入不同,修改失败!\n");
                }
            }
        }
        return;
    }
    
    
    /*
    功能:输入密码
    返回值:整型的密码值
    技术说明:
    (1)此功能在多个模块中都要用到且功能单一,故分离出来,单独作业一个函数
    (2)为了便于在输入中只显示*,接受输入时以字符形式输入,而后转为对应的整型数
    (3)规定密码由不全为0的6位数字构成(当开头是'0'时,实际不足6位),一旦输入错误将重新输入
    附:在实际的系统中,密码通常用字符串描述,即使只允许出现数字字符
    */
    int inputPassword()
    {
        char ch;  //接收字符形式密码
        int iPass=0;   //要转换为数字
        int i;
        while(1)
        {
            for(i=0; i<6; i++)
            {
                ch=getch();  //输入但不显示
                putchar('*');   //输出*
                if(isdigit(ch))
                    iPass=iPass*10+(ch-'0');
                else
                {
                    iPass=0;
                    break;  //退出for循环后,再次接受
                }
            }
            fflush(stdin); //清除键盘缓存区中已经有的输入
            printf("\n");
            if(iPass==0)  //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
            {
                printf("密码要求全为数字,且不能全0!\n");
                printf("请重新输入密码: ");
            }
            else
                break;
        }
        return iPass;
    }
    
    
    /*
    功能:根据账号查询用户,返回用户的下标
    入口参数:要查询用户的账号
    返回值:如果该用户存在,返回该用户在数组中的下标,否则,返回一个负数(-1)
    说明:
      由于不能保证在user数组中按账号有序,本模块不得不采用顺序查找,这是一个效率很低的算法
      如果在开户模块中保证了按账号有序,本函数可以选择更快的算法(见开户模块的说明)
    */
    int search(int id)
    {
        int index=-1;
        int i;
        for(i=0; i<N; i++)
        {
            if(user[i][0]==id)
            {
                index=i;
                break;   //找到了,立即退出循环
            }
        }
        return index; //若找到,其值在0~N-1间,否则,保持-1
    }


    password.txt中的内容:
    Boss 123456

    展开全文
  • 贺老师教学链接 C语言程序设计进阶 本课讲解示例:以字符为单位复制文件 复制文件a.txt,保存到b.txt中#include<stdio.h>#include int main() { FILE *fp1,*fp2; char ch; if((fp1=fopen("a.txt","r"))==NULL)...
  • 文件C语言详细的描述了一个课程设计的全部详细代码.
  • 贺老师教学链接 C语言程序设计进阶 本课讲解如何改造这个程序#include typedef struct{ int month; int year; }DATE; int max(int x, int y); #define area(a, b) (a)*(b) double defaultPrice; int main() ...
  • 贺老师教学链接 C语言程序设计进阶 本课讲解对比ASCII文件和二进制文件//(1)将short int x=12321写入文本文件 #include #include<stdlib.h>int main( ) { short int x=12321; FILE *outfile = fopen("ascii....
  • 在VS2013环境下,编写的C语言Windows程序设计,机房收费管理系统。代码仅仅使用C语言调用Windows API函数和MYSQL数据库专用库文件编写。有C语言基础的,简单易懂。代码没有优化,思路很清晰。没有省略的代码,我都...
  • 贺老师教学链接 C语言程序设计进阶 本课讲解 例:用非标准文件函数复制文件#include #include #include int main() { int handle1, handle2; char ch, filename1[20], filename2[20]; printf("enter sou
  • 返回:贺老师课程教学链接1、阅读下面的程序,写出输出结果,并上机运行程序进行对照#include "stdio.h" int main() { FILE *outfile,*infile; outfile=fopen("data.dat","w"); fprintf(outfile, "1111111111\n")...
  • C语言程序设计实验第三版:文件程序设计

    千次阅读 多人点赞 2020-06-07 22:41:31
    实验七、文件程序设计(p121–p125) 一、实验目的 1、掌握文件的基本概念。 2、掌握文本文件的打开和关闭操作。 2、掌握文本文件的顺序读写方法。 二、实验内容 1、调试示例: 将字符写入文件:从键盘输入一行字符,...
  • C 语言程序设计课程作业 _A 14. 在文件包含预处理语句的使用形式中 ,当#include 后面的文件名用 '括起时 ,寻找被包 含文件的方式是 ( ) 直接按照系统设定的标准方式搜索目录 先在源程序所在目录搜索 ,再按照系统设定...
  • C语言程序设计重庆大学课件第09章C语言文件处理及其应用.pdf
  • 贺老师教学链接 C语言程序设计进阶 本课讲解示例:写到尾再从头读#include #include<stdlib.h>int main() { int a[10], b[10], i; FILE *iofile; if((iofile=fopen("f1.dat","w+"))==NULL) /*用读写方式打开*/ ...
  • 第9章 C语言文件处理及其应用;9.1 文件概念与文件类型指针;9.1.1 文件的概念;文件的分类 按文件的结构形式分类 二进制文件 二进制文件是把内存中的数据按其在内存中的存储形式原样存放到计算机外部存储设备 文本文件...
  • C语言程序设计上机指导目录1常用DOS命令21.1帮助命令help21.2显示文件和目录命令dir21.3显示或改变当前目录命令cd21.4创建目录命令md31.5删除目录命令rd31.6删除文件命令del42Turbo C 2.0编译环境快速入门52.1进入...
  • 第十章文件 C语言程序设计课程组 马迪芳 本章导学 一导入 文件是计算机应用系统的基础使用文件可以存储程序文档数据等各种 各样的信息 本章介绍如何在程序中读取文件数据创建文件和将数据写入文件 通过本章的学习...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,787
精华内容 1,914
关键字:

c语言文件程序设计

c语言 订阅