Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为银行记录创建数据库_C_Database - Fatal编程技术网

C 为银行记录创建数据库

C 为银行记录创建数据库,c,database,C,Database,这是我正在从事的项目的代码,我的目标是创建一个可以添加、编辑和删除记录的数据库。程序正在编译,但速度非常慢,经常崩溃。我只是一个初学者,我不明白为什么会发生这种情况。也许有人能帮我改进代码或者给我指出正确的方向 enter code here #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void clearInput(void); vo

这是我正在从事的项目的代码,我的目标是创建一个可以添加、编辑和删除记录的数据库。程序正在编译,但速度非常慢,经常崩溃。我只是一个初学者,我不明白为什么会发生这种情况。也许有人能帮我改进代码或者给我指出正确的方向

enter code here
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void clearInput(void);
void listAll (void);
void deleteAccount(void);
void addNewAccount(void);
void modifyAccount(void);
int prompt(void);

struct account{
int number;
char lastname[15];
char firstname[15];
float balance;
struct account*next;
};

struct account *firsta, *currenta, *newa;
int anum = 0;

int main()
{
FILE *datafile;
char *filename="studentdatabase.txt";
char ch;
firsta=NULL;
datafile=fopen(filename, "r");
if (datafile) /*assume doesnt exist otherwise*/
    {
    firsta=(struct account*)malloc(sizeof(struct account));
    currenta=firsta;
    while (1)
        {
            newa=(struct account*)malloc(sizeof(struct account));
            fread(currenta, sizeof(struct account),1,datafile);
            if (currenta->next==NULL)
                    break;
                currenta->next=newa;
        }
    fclose(datafile);
    anum=currenta->number;
    }
        do
            {
                clearInput();
                puts("\nA - Add a new account");
                puts("D - Delete account");
                puts("L - List all accounts");
                puts("M - Modify account");
                puts("Q - Quit this program\n");
                printf("\tYour Choice:");
                ch=getchar();
                ch=toupper(ch);
                switch(ch)
                    {
                    case 'A':
                    puts("Add new account\n");
                    clearInput();
                    addNewAccount();
                    break;

                    case 'D':
                    puts("Delete account\n");
                    deleteAccount();
                    break;

                    case 'L':
                    puts("List all accounts\n");
                    listAll();
                    break;

                    case 'M':
                    puts("Modify an account\n");
                    modifyAccount();
                    break;

                    case 'Q':
                    puts ("Quit\n");
                    default:
                    break;
                    }
            }
                while(ch!='Q');
                /*Save the records to disc*/
                currenta=firsta;
                if(currenta==NULL)
                    return(0);      /*No data to write - End of Program*/
                datafile=fopen(filename,"w");

                if (datafile=NULL)
                    {
                        printf("Error writing to %s\n", filename);
                        return(1);
                    }
                    /*write each record to disc*/

                    while(currenta!=NULL)
                    {
                    fwrite(currenta, sizeof(struct account),1,datafile);
                        currenta=currenta->next;
                    }
                    fclose(datafile);
                    return(0);
                }
                /*This function clears any text from the input stream*/
                void clearInput(void)
                {
                    fflush(stdin);
                }
                void addNewAccount(void)
                {
                    newa=(struct account*)malloc(sizeof(struct account));
                    /*Check to see if this is the first record, if so then 
                    itialize all the pointers to this, first ftrusture in 
                    the database*/
                    if(firsta==NULL)
                        firsta=currenta=newa;
                    /*Otherwise you must find the end of the structure list
                    (easily spotted by the NULL pointer) and add on the new 
                    structure you just allocated memory for*/
                    else
                    {
                        currenta=firsta;    /*makes the first current*/

                                            /*loop throught all records*/
                        while(currenta->next!=NULL)
                            currenta=currenta->next;
                            /*last record found*/
                            currenta->next=newa; /*save the address of new*/
                            currenta=newa; /*makes current new*/
                    }
                    /*now you just fill in the new structure*/
                        anum++;
                        printf("%27s:%5i\n","Account number", anum);
                        currenta->number=anum;
                        printf("%27s:","Enter customer's lastname");
                        gets(currenta->lastname);
                        printf("%27s:","Enter firstname");
                        gets(currenta->firstname);
                        printf("%27f:€","Enter account balance");
                        scanf("%f", &currenta->balance);
                        /*Finally cap the new record with a NULL pointer so
                        that you know its the last record*/
                        currenta->next=NULL;
                }

                void listAll(void)
                {
                if (firsta==NULL)
                    puts("There are no records to print out");
                    else
                    {
                    printf("%6s %-15s %-15s €%8.2f\n",
                        currenta->number,
                        currenta->lastname,
                        currenta->firstname,
                        currenta->balance);
                    }
                    while ((currenta=currenta->next) !=NULL);
                }
                void deleteAccount(void)
                {
                    int record;
                    struct account *previousa;
                    if(firsta==NULL)
                    {
                        puts("There are no records to delete");
                        return;
                    }
                    listAll();
                    /*Shows all record first*/
                    printf("Enter account number to delete: ");
                    scanf("%d",&record);

                    currenta=firsta;
                    while(currenta!=NULL)
                    {
                    {
                    if(currenta->number==record)
                        {
                        if(currenta==firsta) /*special condition*/
                        firsta=currenta->next;
                        else
                        previousa->next=currenta->next;
                        free(currenta);
                        printf("Account %d deleted! \n", -record);
                        return;
                        }
                        previousa=currenta;
                        currenta=currenta->next;
                    }
                }
                printf("Account %d was not found!\n", record);
                puts("Nothing deleted.");
                }
                void modifyAccount(void)
                {
                int record;
                if (firsta==NULL)
                {
                    puts("There are no records to modify!");
                    return;
                }
            listAll();  /*Show all records first*/
            printf("Enter account number to modify or change: ");
            scanf("%d",&record);
            currenta=firsta;
            while (currenta!=NULL)
            {
                if(currenta->number==record)
                    {
                     printf("Account €%d:\n", currenta->number);
                     printf("Last name: %s\n", currenta->lastname);
                     if (prompt())
                        gets (currenta->lastname);
                        printf("firstname %s \n", currenta->firstname);
                     if (prompt())
                        gets(currenta->firstname);
                        printf("Balance %8.2f\n", currenta->balance);
                     if (prompt())
                         scanf("%f", &currenta->balance);
                         return;
                    }
                    else
                    {
                    currenta=currenta->next;
                    }
            }
            printf("Account %d was not found!\n", record);
            }
            int prompt(void)
            {
            char ch;
            clearInput();
            printf("Update?");
            ch=getchar();
            ch=toupper(ch);
            clearInput();
            if(ch=='Y')
            {
                printf("Enter new. ");
                return(1);
            }
            else return(0);
            }
在此处输入代码
#包括
#包括
#包括
#包括
void clearInput(void);
作废列表全部(作废);
作废账户(作废);
作废新增账户(作废);
作废修改账户(作废);
int提示符(void);
结构帐户{
整数;
char lastname[15];
charfirstname[15];
浮动天平;
结构帐户*下一步;
};
结构帐户*firsta、*currenta、*newa;
int-anum=0;
int main()
{
文件*数据文件;
char*filename=“studentdatabase.txt”;
char ch;
firsta=NULL;
数据文件=fopen(文件名,“r”);
如果(数据文件)/*则假定不存在,否则*/
{
firsta=(结构帐户*)malloc(结构帐户大小);
电流A=firsta;
而(1)
{
newa=(结构帐户*)malloc(sizeof(结构帐户));
fread(currenta,sizeof(结构帐户),1,数据文件);
如果(currenta->next==NULL)
打破
currenta->next=newa;
}
fclose(数据文件);
anum=当前A->编号;
}
做
{
clearInput();
放置(“\nA-添加新帐户”);
看跌期权(“D-删除账户”);
看跌期权(“L-列出所有账户”);
看跌期权(“M-修改账户”);
puts(“Q-退出此程序\n”);
printf(“\t您的选择:”);
ch=getchar();
ch=toupper(ch);
开关(ch)
{
案例“A”:
出售(“添加新帐户”);
clearInput();
addNewAccount();
打破
案例“D”:
出售(“删除帐户”);
deleteCount();
打破
案例“L”:
放置(“列出所有帐户”\n);
listAll();
打破
案例“M”:
放置(“修改帐户\n”);
修改账户();
打破
案例‘Q’:
卖出(“退出”);
违约:
打破
}
}
while(ch!=“Q”);
/*将记录保存到光盘*/
电流A=firsta;
如果(currenta==NULL)
返回(0);/*没有要写入的数据-程序结束*/
数据文件=fopen(文件名,“w”);
如果(数据文件=NULL)
{
printf(“写入%s\n”文件名时出错);
申报表(1);
}
/*将每条记录写入光盘*/
while(currenta!=NULL)
{
fwrite(currenta,sizeof(结构帐户),1,数据文件);
currenta=currenta->next;
}
fclose(数据文件);
返回(0);
}
/*此函数用于清除输入流中的任何文本*/
void clearInput(void)
{
fflush(stdin);
}
void addNewAccount(void)
{
newa=(结构帐户*)malloc(sizeof(结构帐户));
/*检查这是否是第一条记录,如果是,则
初始化所有指向此的指针,第一次刷新
数据库*/
if(firsta==NULL)
firsta=当前A=新A;
/*否则,必须找到结构列表的末尾
(很容易被空指针发现)并添加新的
您刚才为其分配内存的结构*/
其他的
{
currenta=firsta;/*产生第一个电流*/
/*循环浏览所有记录*/
while(currenta->next!=NULL)
currenta=currenta->next;
/*最后发现的记录*/
currenta->next=newa;/*保存新地址*/
currenta=newa;/*使当前为新*/
}
/*现在您只需填写新结构*/
anum++;
printf(“%27s:%5i\n”,“账号”,anum);
currenta->number=anum;
printf(“%27s:”,“输入客户的姓氏”);
获取(currenta->lastname);
printf(“%27s:”,“输入名字”);
获取(currenta->firstname);
printf(“%27f:欧元”,“输入账户余额”);
scanf(“%f”,¤ta->balance);
/*最后,用空指针覆盖新记录,以便
你知道这是最后一张唱片吗*/
currenta->next=NULL;
}
void listAll(void)
{
if(firsta==NULL)
看跌期权(“没有可打印的记录”);
其他的
{
printf(“%6s%-15s%-15s€%8.2f\n”,
当前A->编号,
currenta->lastname,
currenta->firstname,
电流A->平衡);
}
while((currenta=currenta->next)!=NULL);
}
作废删除账户(作废)
{
int记录;
printf("%6s %-15s %-15s €%8.2f\n",
                    currenta->number,...
printf(...);
while ((currenta=currenta->next) !=NULL);
while (currenta != NULL) {
    printf(...);
    currenta = currenta->next;
}
while (1)
    {
        newa=(struct account*)malloc(sizeof(struct account));
        fread(currenta, sizeof(struct account),1,datafile);
        if (currenta->next==NULL)
                break;
            currenta->next=newa;
    }
fread(currenta, sizeof(struct account),1,datafile);
datafile=fopen(filename,"w");
if (datafile=NULL)         
          ^^^