大一新生,刚接触c语言不久,只想分享一下自己的小成果(第一次做)嘿嘿!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N sizeof(book)


typedef struct BOOK//book结构体
{
    char name[100];
    long num;
    char writer[100];
    float price;
    int stock;
    struct BOOK *next;

} book;
struct TEACHER
{
    char id[17];
    char key[17];
} teacher[10];
struct STUDENT
{
    char id[17];
    char key[17];
} student[10];
void menu();//菜单
void menu1();//学生登录菜单
void menu2();//管理员登录菜单
void writeninfile1(book *head);//写入图书添加到文件末尾
void writeninfile2(book *head);//写入图书并取代原文件的内容
void print(book *head);//对结构体的读取
void findbook();//查找图书
void del();//删除函数
void modifybook();//修改图书信息
void putbook();//新书录入函数
void Lendbook();//借出函数
void returnbook();//归还函数
void creataccount();//创建账号菜单
void putaccount1();
void putaccount2();
int Verification1(char n[],char m[]);
int Verification2(char n[],char m[]);
book *readfile();//从文件中读取书本信息并返回头指针

int main()
{
    menu();
    return 0;
}
void menu()//菜单
{
    char c;
    do
    {
        system("color B4");
        printf("\n\n\n\n");
        printf("                          *****************************************\n");
        printf("                          *             图书管理系统              *\n");
        printf("                          *               1.学生                  *\n");
        printf("                          *               2.管理员                *\n");
        printf("                          *               3.创建账号              *\n");
        printf("                          *               4.退出系统              *\n");
        printf("                          *****************************************\n");
        printf("                          _________________________________________\n\n\n");
        printf("请选择你的操作");
        printf("(1/2/3):\n");
        c = getch();
        system("cls");
        switch(c)
        {
        case '1':
            menu1();
            break;
        case '2':
            menu2();
            break;
        case '3':
            creataccount();
            break;
        case '4':
            exit(0);
            break;
        default :
            printf("选择错误!请重新选择:\n");
            break;
        }
    }
    while(1);
}
void menu2()//管理员登录菜单
{
    char teacherID[17],teacherKEY[17];
    char c;
    do
    {
        printf("请输入用户名:\n");
        gets(teacherID);
        printf("请输入密码:\n");
        gets(teacherKEY);
        system("cls");
        if(Verification1(teacherID,teacherKEY))
        {
            do
            {
                system("color ED");
                printf("          ************************\n");
                printf("          *       1.新书录入     *\n");
                printf("          *       2.删除图书     *\n");
                printf("          *       3.图书查找     *\n");
                printf("          *       4.图书信息修改 *\n");
                printf("          *       5.查看所有书籍 *\n");
                printf("          *       6.返回上一界面 *\n");
                printf("          ************************\n\n\n");
                printf("请选择你的操作:\n");
                scanf("%c",&c);
                while(getchar()!='\n');
                system("cls");
                switch(c)
                {
                case '1':
                    putbook();
                    while(getchar()!='\n');
                    break;
                case '2':
                    del();
                    while(getchar()!='\n');
                    break;
                case '3':
                    findbook();
                    while(getchar()!='\n');
                    break;
                case '4':
                    modifybook();
                    while(getchar()!='\n');
                    break;
                case '5':
                    print(readfile());
                    break;
                case '6':
                    menu();
                    break;
                default :
                    printf("输入错误,请重新选择!\n");
                }
            }
            while(1);
        }
        else
        {
            printf("用户名或密码错误!\n");
            printf("1.返回上一界面\n");
            printf("2.输入任意键重新输入账号密码\n");
            scanf("%c",&c);
            while(getchar()!='\n');
            system("cls");
            switch(c)
            {
            case '1':
                menu();
                break;
            default :
                printf("重新输入:\n");
            }

        }
    }
    while(1);
}
void menu1()//学生登录菜单
{
    char studentID[100],studentKEY[100];
    char c;
    do
    {
        printf("请输入用户名:\n");
        gets(studentID);
        printf("请输入密码:\n");
        gets(studentKEY);
        system("cls");
        if(Verification2(studentID,studentKEY))
        {
            do
            {
                system("color 7F");
                printf("       ***********************\n");
                printf("       *      1.图书借出     *\n");
                printf("       *      2.图书归还     *\n");
                printf("       *      3.图书查找     *\n");
                printf("       *      4.查看所有书籍 *\n");
                printf("       *      5.返回上一界面 *\n");
                printf("       ***********************\n\n\n");
                printf("请选择你的操作:\n");
                scanf("%c",&c);
                while(getchar()!='\n');
                system("cls");
                switch(c)
                {
                case '1':
                    Lendbook();
                    while(getchar()!='\n');
                    break;
                case '2':
                    returnbook();
                    while(getchar()!='\n');
                    break;
                case '3':
                    findbook();
                    while(getchar()!='\n');
                    break;
                case '4':
                    print(readfile());
                    break;
                case '5':
                    menu();
                    break;
                default :
                    printf("输入错误,请重新选择!\n");
                    break;

                }
            }
            while(1);
        }
        else
        {
            printf("用户名或密码错误!\n");
            printf("1.返回上一界面\n");
            printf("2.输入任意键重新输入账号密码\n");
            scanf("%c",&c);
            while(getchar()!='\n');
            system("cls");
            switch(c)
            {
            case '1':
                menu();
                break;
            default:
                printf("重新输入:\n");
            }
        }
    }
    while(1);
}
void putbook()
{
    FILE *fp;
    char name[100];
    book *head,*p,*pr;
    if((fp=fopen("book.txt","r"))==NULL)
    {
        head = NULL;
    }
    else
    {
        head = readfile();
    }
    p=pr=head;
    printf("请输入书名\n");
    scanf("%s",name);
    if(head == NULL)
    {
        head = (book *)malloc(N);
        strcpy(head->name,name);
        printf("请输入编号\n");
        scanf("%ld",&head->num);
        printf("请输入作者\n");
        scanf("%s",head->writer);
        printf("请输入价格\n");
        scanf("%f",&head->price);
        head->stock=1;
        head->next=NULL;
        system("cls");
        printf("添加成功!\n");
        writeninfile2(head);
    }
    else
    {
        while(strcmp(name,p->name)!=0&&p->next!=NULL)
        {
            p=p->next;
        }
        if(strcmp(name,p->name)==0)
        {
            printf("改书已经存在了!储量+1!\n");
            p->stock=p->stock+1;
        }
        else
        {
            pr=(book *)malloc(N);
            p->next=pr;
            strcpy(pr->name,name);
            printf("请输入编号\n");
            scanf("%ld",&pr->num);
            printf("请输入作者\n");
            scanf("%s",pr->writer);
            printf("请输入价格\n");
            scanf("%f",&pr->price);
            pr->stock=1;
            pr->next=NULL;
            system("cls");
            printf("添加成功!\n");
        }
        writeninfile2(head);
    }
}
void writeninfile1(book *head)//写入图书添加到文件末尾
{
    FILE *fp;
    book *p;
    p=head;
    if((fp=fopen("book.txt","a"))==NULL)
    {
        printf("没有图书!请进入管理员界面添加!\n");
        menu();
    }
    while(p!=NULL)
    {
        fprintf(fp,"%s %ld %s %.2f %d ",p->name,p->num,p->writer,p->price,p->stock);
        p=p->next;
    }
    fclose(fp);
}
void writeninfile2(book *head)//写入图书并取代原文件的内容
{
    FILE *fp;
    book *p;
    p=head;
    if((fp=fopen("book.txt","w"))==NULL)
    {
        printf("没有图书!请进入管理员界面添加!\n");
        menu();
    }
    while(p!=NULL)
    {
        fprintf(fp,"%s %ld %s %.2f %d ",p->name,p->num,p->writer,p->price,p->stock);
        p=p->next;
    }
    fclose(fp);
}
book *readfile()//读文件中的数据并返回头文件
{
    FILE *fp;
    book *head=NULL,*p,*pr;
    if((fp=fopen("book.txt","r"))==NULL)
    {
        printf("没有图书!请进入管理员界面添加!\n");
        menu();
    }
    while(!feof(fp))
    {
        p=(book *)malloc(N);
        fscanf(fp,"%s %ld %s %f %d ",p->name,&p->num,p->writer,&p->price,&p->stock);
        if(head==NULL)
            head=p;
        else
            pr->next=p;
        p->next=NULL;
        pr=p;
    }
    fclose(fp);
    return head;
}
void print(book *head)//链表的读取
{
    book *p;
    p=head;
    if(head!=NULL)
    {
        do
        {
            printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
            p=p->next;
        }
        while(p);
    }
}
void findbook()
{
    char name[100];
    book *p;
    p=readfile();
    printf("请输入你要查找的书名:\n");
    scanf("%s",name);
    if(p==NULL)
    {
        printf("没有图书!请进入管理员界面添加!\n");
        menu();
    }
    else
    {
        while(p)
        {
            if(strcmp(p->name,name)==0)
            {
                printf("找到了!\n");
                printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
                break;
            }
            if(p->next==NULL)
                printf("没有该书本信息!\n");
            p=p->next;
        }
    }
}
void del()
{
    char name[100];
    book *head,*p,*pr;
    head = readfile();
    p=pr=head;
    printf("请输入你要删除书的书名:\n");
    scanf("%s",name);
    if(head==NULL)
    {
        printf("没有书籍!返回主菜单!");
        menu();
    }
    while(strcmp(p->name,name)!=0&&p->next!=NULL)
    {
        pr=p;
        p=p->next;
    }
    if(strcmp(p->name,name)==0)
    {
        printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
        if(p==head)
        {
            head=p->next;
        }
        else
        {
            pr->next=p->next;
        }
        printf("删除成功!\n");
        free(p);
    }
    else
    {
        printf("没有这本书的信息!\n");
    }
    writeninfile2(head);

}
void modifybook()
{
    char name[100];
    book *head,*p,*pr;
    head = readfile();
    p=pr=head;
    printf("请输入你要修改书的书名:\n");
    scanf("%s",name);
    if(head==NULL)
    {
        printf("没有书籍!返回主菜单!");
        menu();
    }
    while(strcmp(p->name,name)!=0&&p->next!=NULL)
    {
        pr=p;
        p=p->next;
    }
    if(strcmp(p->name,name)==0)
    {
        printf("找到了!\n");
        printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
        printf("请输入修改的书名\n");
        scanf("%s",p->name);
        printf("请输入修改的编号\n");
        scanf("%ld",&p->num);
        printf("请输入修改的作者\n");
        scanf("%s",p->writer);
        printf("请输入修改的价格\n");
        scanf("%f",&p->price);
        printf("请输入修改储量\n");
        scanf("%d",&p->stock);
        printf("修改成功!\n");
    }
    else
    {
        printf("没有这本书的信息!\n");
    }
    writeninfile2(head);
}
void Lendbook()
{
    char name[100];
    book *head,*p,*pr;
    head = readfile();
    p=pr=head;
    printf("请输入你要借出书的书名:\n");
    scanf("%s",name);
    if(head==NULL)
    {
        printf("没有书籍!返回主菜单!");
        menu();
    }
    while(strcmp(p->name,name)!=0&&p->next!=NULL)
    {
        pr=p;
        p=p->next;
    }
    if(strcmp(p->name,name)==0)
    {
        printf("该书的信息为:\n");
        printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
        if(p->stock>0)
        {
            printf("借出成功!\n");
            p->stock--;
        }
        else
        {
            printf("该书已经被借完了!\n");
        }
    }
    else
    {
        printf("没有这本书的信息!请联系管理员添加!\n");
    }
    writeninfile2(head);
}
void returnbook()
{
    char name[100];
    book *head,*p,*pr;
    head = readfile();
    p=pr=head;
    printf("请输入你要归还书的书名:\n");
    scanf("%s",name);
    if(head==NULL)
    {
        printf("没有书籍!返回主菜单!");
        menu();
    }
    while(strcmp(p->name,name)!=0&&p->next!=NULL)
    {
        pr=p;
        p=p->next;
    }
    if(strcmp(p->name,name)==0)
    {
        printf("该书的信息为:\n");
        printf("书名:%20s\t书号:%3ld\t作者:%20s\t价格:%7.2f\t库存:%d\n",p->name,p->num,p->writer,p->price,p->stock);
        p->stock++;
        printf("归还成功!\n");
    }
    else
    {
        printf("没有这本书的信息!请联系管理员归还该书!\n");
    }
    writeninfile2(head);
}
void creataccount()
{
    char c;
    do
    {
        printf("              *************************\n");
        printf("              *     1.注册管理员账号  *\n");
        printf("              *     2.注册学生账号    *\n");
        printf("              *     3.返回上一界面    *\n");
        printf("              *************************\n\n\n");
        printf("请输入你的选择:\n");
        printf("    (1/2/3) \n");
        scanf("%c",&c);
        while(getchar()!='\n');
        system("cls");
        switch(c)
        {
        case '1':
            putaccount1();
            while(getchar()!='\n');
            break;
        case '2':
            putaccount2();
            while(getchar()!='\n');
            break;
        case '3':
            menu();
            break;
        }
    }
    while(1);
}

void putaccount1()
{
    char a[17],b[17];
    FILE *fp;
    printf("请输入注册账号:\n");
    scanf("%s",a);
    printf("请输入注册密码:\n");
    scanf("%s",b);
    if((fp=fopen("teacher.txt","a"))==NULL)
    {
        printf("系统内存不够请释放内存!");
        menu();
    }
    else
    {
        fprintf(fp,"%s %s ",a,b);
    }
    fclose(fp);
}
void putaccount2()
{
    char a[17],b[17];
    FILE *fp;
    printf("请输入注册账号:\n");
    scanf("%s",a);
    printf("请输入注册密码:\n");
    scanf("%s",b);
    if((fp=fopen("student.txt","a"))==NULL)
    {
        printf("系统内存不够请释放内存!");
        menu();
    }
    else
    {
        fprintf(fp,"%s %s ",a,b);
    }
    fclose(fp);
}
int Verification1(char n[],char m[])
{
    char a[10][17],b[10][17];
    int i,t=0;
    FILE *fp;
    if((fp=fopen("teacher.txt","r"))==NULL)
    {
        printf("打开文件失败!");
        menu();
    }
    else
    {
        for(i=0;!feof(fp);i++)
        {
            fscanf(fp,"%s %s ",a[i],b[i]);
            if(strcmp(a[i],n)==0&&strcmp(b[i],m)==0)
            t=1;
        }
    }
    fclose(fp);
    return t;
}
int Verification2(char n[],char m[])
{
    char a[10][17],b[10][17];
    int i,t=0;
    FILE *fp;
    if((fp=fopen("student.txt","r"))==NULL)
    {
        printf("打开文件失败!");
        menu();
    }
    else
    {
        for(i=0;!feof(fp);i++)
        {
            fscanf(fp,"%s %s ",a[i],b[i]);
            if(strcmp(a[i],n)==0&&strcmp(b[i],m)==0)
            t=1;
        }
    }
    fclose(fp);
    return t;
}

我不专业!正在学习中。。。
简易的图书管理系统

相关文章: