视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
银行管理系统数据结构报告
2025-09-29 16:35:41 责编:小OO
文档
C语言程序设计

课程设计材料

学生姓名:        学  号:                       

系  (院):                                       

专    业:                                       

设计(论文)题目:                                

完成日期:                                         

指导教师:                                        

课程设计目的

1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2)通过课程设计,进一步掌握C有并重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。

3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。

4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能设计和实现一个中小型系统。

5)通过课程设计,加强了自己的程序分析能力。

课程设计内容

用C语言编写软件完成以下任务:

1 储户开户(储户数据包括帐号,姓名,身份证号,密码和账户余额等),储户的信息保存在account.dat文件中,应对储户的开户金额做出(如金额不低于10元钱)。

2 储户的密码修改。

3 储户的余额查询。

4 储户销户。

5 储户的各项信息更改后,应同时更新account.dat文件中的内容。

总体设计

本系统的功能模块如图1所示,主要有以下模块:

(1)银行个人账户管理系统主界面:构造函数void menu1(),实现系统主菜单的显示。

(2)第二菜单:构造函数void menu2(),实现系统第二菜单的显示。

(3)用户信息录入:构造函数void add(),实现用户个人信息的录入及保存。

(4)用户密码修改:构造函数void chasec(i),实现对该用户密码的修改并通过构造函数void (struct User use[X],int n)对修改后的密码保存。

(5)用户余额查询:构造函数void show(i),实现对相应用户的账户余额的显示并通过构造函数(struct User use[X],int n)对余额和存储日期做更新。

(6)用户销户:构造函数void del(i),实现对指定用户信息的删除并通过构造函数(struct User use[X],int n)对数据库的更新。

详细设计

(一)数据结构设计

本程序用到的数据结构主要有:指针、链表、结构体、文件等。先声明一个类型为struct student的结构体,其成员为个人账户信息。然后通过对指针、链表、文件等数据结构的操作,实现对个人账户的录入,插入,存盘,查询,浏览,删除,修改等一系列操作。其中,结构体定义如下:

struct User

{

    char cardnum[20];

    char name[10];

    char id[20];    

    char sex[4];

    long sec;

    double money;

    int year;

    int mon;

    int day;

};

(二)模块接口设计

1.所有函数模块声明如下:

void menu1();

void menu2(char name[10]);

void add();

void tpro();

void perorg(int i);

int  reads(struct User use[X]);

void save(struct User use[X],int n);

void del(int i);                                                                                                                          

void chasec(int i);

void show(int i);

2.并定义两个全局变量:

#define X 100

#define P 1.002

3.主要模块的实现

1. 程序总体结构图

主菜单结构图

当1

输入值n=1                           假

用户开户函数

add()

n=2             假

个人账户管理函数tpro()&perorg(int i)

n=3
退出
 第二菜单结构图

输入值n=1                                      假

查询余额函数show(int i)

n=2                   假

修改密码函数chasec(int i)

n=3       假

销户函数del(int i)

n=4
返回上一菜单
2. 具体功能框图

(1)储户开户函数add

以追加方式打开account.dat文件                           假

真           以只写方式打开account.dat

文件            假

输入用户账号、姓名

输出文件失败

输入用户身份证号、性别
输入用户密码
输入存入金额
假                  存入金额

小于10元               真

返回

用户信息写入文件不予开户
关闭文件
(2)读取储户信息函数reads

真                               以追加方式打开account.dat文件  

            假

循环变量i=0

输入文件

打开失败

当文件未结束时
读取用户信息到数组元素use[i]中
i++返回
关闭文件
返回用户人数i

(3)储户销户函数del

i,n=read(use)

Y                           确认删除?

Y/N                               N
j=i+1

返回

当j
use[j-1]=use[j]
j++
调用保存函数save()保存

输出提示“销户成功”
(三)运行结果

主菜单界面:

信息录入界面:

信息浏览界面:

信息修改界面:

信息删除界面:

编程体会

这次编程课题时间还是挺长的,不过却给了我很深的启示。

因为自己电脑出故障的关系,我的课程设计停了好多天,幸好之前有些大纲,才不至于拖延完成课程设计的时间。其实这次课程设计的内容不是很难,加之我在动笔之前搜集了相当多的资料,完成课程设计就相对容易了很多。现在就谈谈我在课程设计这段时间内的体会:

我的所有子函数都是自己写的,这是非常有成就感的事情。在刚完成初稿的时候很多问题让我颇为头疼,首先是乱码问题,即在录入数据时,记录的某些数据是乱码,这是很常见的一个问题,我在排查问题时发现是字符类型不匹配造成的,double类型与%f的不匹配造成了乱码。在修改密码的再存储问题上我也出现了问题,这让我深刻体会到格式的重要性,在修改了数据存储的格式后这个问题也得到了解决。还有就是数组大小的重要性,如果数组大小不控制好,也会出现或多或少的问题,就比如录入性别时,大小为二的数组能存储“男”或“女”,但之后也会出现乱码的问题,将之调为四后,问题解决。这些问题看上去都是小问题,但是就是这么一个小问题,往往就是阻碍程序正常运行的罪魁祸首,这正应了那句话,细节决定成败,我们在编程时就应该注意这些细微的不同,这样才能做出好程序来。

源程序

#include

#include

#include

#include

#define X 100

#define P 1.002

struct User

{

    char cardnum[20];

    char name[10];

    char id[20];    

    char sex[4];

    long sec;

    double money;

    int year;

    int mon;

    int day;

};

void menu1();

void menu2(char name[10]);

void add();

void tpro();

void perorg(int i);

int  reads(struct User use[X]);

void save(struct User use[X],int n);

void del(int i);                                                                                                                          

void chasec(int i);

void show(int i);

void main()

{

    int n;

    while(1)

    { 

        menu1();

        printf("\\n 请输入您要选择的操作序号,按回车键确认:");

        scanf("%d",&n);

        switch(n)

        {

            case 1: add();break;

            case 2: tpro();break;        

            case 3: exit(0);

            default: printf("输入错误,请输入列表中存在的序号!\n ");

        }

    }

}

void menu1()

{

    printf("************************************************************************* ");

    printf("\\n***************************银行个人账户管理系统************************** ");

    printf("\\n                         1   用户开户");

    printf("\\n                         2   个人账户管理");

    printf("\\n                         3   退出系统");

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

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

}

void menu2(char name[10])

{

    printf("************************************************************************* ");

    printf("                          欢迎进入%s的银行个人账户 ",name);

    printf("\\n                         1  余额查询");

    printf("\\n                         2  密码修改");

    printf("\\n                         3  销户");

    printf("\\n                         4  返回上一菜单");

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

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

}

void save(struct User use[X],int n) /*保存用户信息*/

{

    FILE *fp;

    int i=0;

    if((fp=fopen("account.dat

    { 

        printf("文件打开失败!\n");

        return ;

    }

    else

    {

for(i=0;i        {

            fprintf(fp,"\\n%s\\n",use[i].cardnum);

            fprintf(fp,"\\n%s\\n",use[i].name);

            fprintf(fp,"\\n%s\\n",use[i].id);

            fprintf(fp,"\\n%s\\n",use[i].sex); 

            fprintf(fp,"\\n%ld\\n",use[i].sec);

            fprintf(fp,"\\n%lf\\n",use[i].money);

            fprintf(fp,"\\n%d\\n",use[i].year);

            fprintf(fp,"\\n%d\\n",use[i].mon);

            fprintf(fp,"\\n%d\\n",use[i].day);

        }

    }

    fclose(fp);

}

void add()/*用户开户*/

{

    FILE *fp;

    struct User use;

    if((fp=fopen("account.dat如果文件已经存在,可以追加用户信息*/

    {

        if((fp=fopen("account.dat文件不存在时,创建新文件,输入用户信息*/

        { 

            printf("用户不存在!\n");

            return ;

        }

    }        

        printf("\\n请输入用户帐号,并按回车键确认:\n");

        scanf("%s",use.cardnum);

        fprintf(fp,"\\n%s\\n",use.cardnum);

        printf("\\n请输入用户姓名,并用回车键确认: \\n");

        scanf("%s",use.name);

        fprintf(fp,"\\n%s\\n",use.name);

        printf("\\n请输入用户身份证号,并用回车键确认: \\n");

        scanf("%s",use.id);

        fprintf(fp,"\\n%s\\n",use.id);

        printf("\\n请输入用户性别,并按回车键确认:\n");

        scanf("%s",use.sex);

        fprintf(fp,"\\n%s\\n",use.sex); 

        printf("\\n请输入用户密码,并用回车键确认: \\n");

        scanf("%ld",&use.sec);

        fprintf(fp,"\\n%ld\\n",use.sec);

        printf("\\n请输入用户储入金额,并按回车键确认: \\n");

        scanf("%lf",&use.money);

        fprintf(fp,"\\n%lf\\n",use.money);

        printf("\\n请输入年份,并按回车键确认: \\n");

        scanf("%d",&use.year);

        fprintf(fp,"\\n%d\\n",use.year);

        printf("\\n请输入月份,并按回车键确认: \\n");

        scanf("%d",&use.mon);

        fprintf(fp,"\\n%d\\n",use.mon);

        printf("\\n请输入日期,并按回车键确认: \\n");

        scanf("%d",&use.day);

        fprintf(fp,"\\n%d\\n",use.day);

        if(use.money<10.00)  

        {     

            printf("\\n用户金额低于十元,不予开户\n");

            return ; 

        }

        else 

        {

            printf("\\n***********************开户成功*************************\\n");

        }

    fclose(fp);

}

void tpro()/*过渡程序,用于开启个人账户*/

{

    struct User use[X];

    int i,n;

    char s[20];

    long t;

    n=reads(use); 

    printf("\\n请用户输入账号,密码,用空格隔开,按回车键确认:\n");

    scanf("%s %ld",s,&t);

for(i=0;i    {

        if(strcmp(s,use[i].cardnum)==0&&t==use[i].sec) 

        {

            break;

        }

    }

if(i>=n||t!=use[i].sec)

    {

        printf("\\n                  **输入错误**\\n");

        return;

    } 

    perorg(i);         

}

void perorg(int i)/*第二菜单的程序*/

{

    struct User use[X];

    int n,p;

    n=reads(use);

if(i    {

        while(1)

        { 

            menu2(use[i].name);

            printf("\\n 请输入您要选择的操作序号,按回车键确认:");

            scanf("%d",&p);

            switch(p)

            {

                case 1: show(i);break;

                case 2: chasec(i);break;       

                case 3: del(i);break;

                case 4: return ;

                default: printf("输入错误,请输入列表中存在的序号!\n ");

            }

        }

    }

}

int reads(struct User use[X]) /* 读取用户内容,返回值为数据个数*/

{

    FILE *fp;

    int i=0;

    if((fp=fopen("account.dat

    { 

        printf("文件打开失败!\n");

        return 0;

    }

    else

    {

        for(i=0;!feof(fp)/*新函数,检查文件是否结束*/;i++)

        {

        fscanf(fp,"\\n%s %s %s %s %ld %lf %d %d %d\\n",use[i].cardnum,use[i].name,use[i].id,use[i].sex,&use[i].sec,&use[i].money,&use[i].year,&use[i].mon,&use[i].day);

        }     

    }

    fclose(fp);

    return i; 

}

void show(int i) /*余额查询*/

{

    struct User use[X];

    int year,mon,day,m,n;

    double money;

    n=reads(use);

    printf("\\n请输入日期(年月日),用空格隔开,按回车键确认:\n");

    scanf("%d %d %d",&year,&mon,&day);

    m=(year-use[i].year)*12+mon-use[i].mon;

    money=pow(P,m)*use[i].money;

    use[i].money=money;

    use[i].year=year;

    use[i].mon=mon;

    use[i].day=day;

    printf("*********************您的余额如下**********************\\n");

    printf("余额:");

    printf("%11.2lf \\n",money);

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

    save(use,n);

}

void chasec(int i)  /*用户密码更改*/

{

    struct User use[X];

    int n;

    n=reads(use);

    printf("\\n请输入更改后密码,按回车键确认:\n");

    scanf("%ld",&use[i].sec);

    save(use,n);

    printf("\\n修改成功\n");

}

void del(int i)  /*用户信息删除函数*/

{

    struct User use[X];

    char a[2];

    int n,j;

    n=reads(use);

    printf("\\n                                     确认删除?\n                                        Y/N\\n");

    scanf("%s",a);

    if(strcmp(a,"N")==0)

    {

        return;

    }

    else

    {

        for(j=i+1;j        {

            use[j-1]=use[j];

        }

        save(use,n-1);

        printf("销户成功!\n");

        exit(0);

    }

}下载本文

显示全文
专题