C语言课程设计——实现简单的管理系统

本文介绍了用C++实现商品管理系统和职工工资信息管理系统。商品管理系统需完成商品信息计算、排序、查询及显示等功能,职工工资信息管理系统也有类似操作。实现思路是结合结构体和排序,因帮非计科同学,未用stl库,手动实现排序,还提及了主要技术问题。

写这个的大体思路很简单,就是结构体,然后排序等等,由于是帮非计科类的同学写的,不让用stl库,于是就只能手动实现排序,如果可以用结构体排序代码量会少很多,也就几十行就可以。总之,比较基础,在期末考试周中写写代码找找感觉。

C++管理系统实现

商品管理系统

题干信息

1.功能描述
编写一个简单的商品信息管理程序,主要完成商品的一些信息的计算,商品的排序、查询及显示功能。
问题详细描述
某商场的电器区有多种商品,每种商品包括以下信息:代码(整型),名称(字符串),总量(整型),单价(双精度),销售量(整型),库存量(=总量-销售量,整型),销售额(销售量*单价,双精度),例如目前有五种商品的基本信息,如表1所示。

在这里插入图片描述

要求在主函数中对各类商品的信息进行初始化,编写多个函数分别实现下列功能,而后在main函数中进行调用。
各个函数的功能描述为:
计算函数cal:计算各类商品的库存量及销售额。
排序函数sort1:按库存量升序排序,若库存量相同则按销售量升序排序,要求使用冒泡法排序。
排序函数sort2:按商品名称降序排序,要求使用选择法排序。
查询函数search:根据商品代码查找指定商品。若找到则返回该商品的下标,否则返回-1。
汇总函数total:计算并返回销售总额(所有商品的销售额的和)。
显示函数output:输出商品的信息。
显示菜单函数showMenu:显示菜单。

全部代码
//
//  main.cpp
//  LCS
//
//  Created by 陈冉飞 on 2019/6/21.
//  Copyright © 2019 陈冉飞. All rights reserved.
//

//#include <bits/stdc++.h>
#include<iostream>
#include<iomanip>
using namespace std;
#define name_max_length 100
//宏定义最多的商品数
#define type_total_max 50

struct goods{
    int code;
    char name[name_max_length];
    int num;   //总量
    double price;
    int sold_num;
    int remain_num;
    double total;
};


//计算函数cal
void cal(goods g[],int type_total){
    for (int i = 0; i<type_total; i++) {
        g[i].remain_num = g[i].num - g[i].sold_num;
        g[i].total = g[i].sold_num*g[i].price;
    }
}

//排序函数1
void sort1(goods g[],int type_total){
    int i,j,pos;
    goods temgoods;
    for(i = 0; i < type_total-1; i++)
    {
        pos = i;
        for(j = i; j < type_total; j++)
        {
            if(g[pos].remain_num > g[j].remain_num){
                pos = j;
            }else if(g[pos].remain_num == g[j].remain_num){
                if(g[pos].sold_num > g[i].sold_num){
                    pos = j;
                }
            }
        }
        if(pos != i)
        {
            temgoods = g[i];
            g[i] = g[pos];
            g[pos] = temgoods;
        }
    }
}

//排序函数2
void sort2(goods g[],int type_total){
    int i,j,pos;
    goods temgoods;
    for(i = 0; i < type_total-1; i++)
    {
        pos = i;
        for(j = i; j < type_total; j++)
        {
            if(strcmp(g[pos].name,g[j].name) < 0)
                pos = j;
        }
        if(pos != i)
        {
            temgoods = g[i];
            g[i] = g[pos];
            g[pos] = temgoods;
        }
    }
}

//查询函数
int search(goods g[],int type_total,char temname[]){
    for (int i = 0; i<type_total; i++) {
        if (strcmp(g[i].name, temname) == 0) {
            return i+1;
        }
    }
    return -1;
}

//汇总函数
int total(goods g[],int type_total){
    int sum = 0;
    for (int i = 0; i<type_total; i++) {
        sum+=g[i].total;
    }
    return sum;
}

//显示函数
void output(goods g[],int type_total){
    cout<<"      代码               名称         单价       总量       销售量    库存量    销售额"<<endl;
    for (int i = 0; i<type_total; i++) {
        cout<<setw(10)<<g[i].code;
        printf("%20s",g[i].name);
        cout<<setw(10)<<g[i].price<<setw(10)<<g[i].num<<setw(10)<<g[i].sold_num<<setw(10)<<g[i].remain_num<<setw(10)<<g[i].total<<endl;
        
    }
}

//显示菜单函数
void showMenu()
{
    cout<<"******************************"<<endl;
    cout<<"请输入1—6内的数字"<<endl;
    cout<<"1  按照库存量升序排序"<<endl;
    cout<<"2  按照商品名称降序排序"<<endl;
    cout<<"3  查找指定代码的商品信息"<<endl;
    cout<<"4  计算销售总额"<<endl;
    cout<<"5  输出商品的信息"<<endl;
    cout<<"6  结束"<<endl;
    cout<<"******************************"<<endl;
}


int main(int argc, const char * argv[]) {
    
    goods g[type_total_max] = {0};
    int type_total;
    cout<<"请输入商品种类总数"<<endl;
    cin>>type_total;
    
    //输入信息和计算库存量、销售额的部分
    for (int i = 0; i<type_total; i++) {
        //提示输入
        cout<<"请依次输入商品代码、名称、总量、单价、销售量"<<endl;
        cin>>g[i].code;
        scanf("%s",g[i].name);  //暂时还不能输入有空格的字符串
        cin>>g[i].price>>g[i].num>>g[i].sold_num;
    }
    //调用cal来计算出库存量 销售额
    cal(g, type_total);
    
    //成绩管理系统开始
    int target_num;
    while (true) {
        showMenu();
        cout<<"请输入选项:"<<endl;
        cin>>target_num;
        if (target_num<=6&&target_num>=1) {
            switch (target_num) {
                case 4:
                    cout<<total(g, type_total)<<endl;
                    break;
                case 5:
                    output(g, type_total);
                    break;
                case 6:
                    return 0;
                case 1:
                    sort1(g, type_total);
                    output(g, type_total);
                    break;
                case 2:
                    sort2(g, type_total);
                    output(g, type_total);
                    break;
                case 3:
                    char target_name[name_max_length];
                    cout<<"请输入你想查找的名称"<<endl;
                    scanf("%s",target_name);
                    int target =search(g,type_total,target_name);
                    cout<<"      代码               名称         单价       总量       销售量    库存量    销售额"<<endl;
                    cout<<setw(10)<<g[target].code;
                    printf("%20s",g[target].name);
                    cout<<setw(10)<<g[target].price<<setw(10)<<g[target].num<<setw(10);
                    cout<<g[target].sold_num<<setw(10)<<g[target].remain_num<<setw(10)<<g[target].total<<endl;
                    break;
            }
        }
        else{
            cout<<"输入错误,请输入1-6范围内的数字"<<endl;
        }
    }
    return 0;
}


//
//5
//10120 HaierCon 2998 155 55
//10564 IPodMP3 1250 245 32
//11254 SegaHDisk 655 120 20
//15826 IBMLapgtop 8188 80 15
//18257 SontDigtC 3588 150 29

运行结果要求

下面给出程序运行的部分界面:
程序首先计算库存量与销售额,而后显示菜单,提示用户输入数字1~6以进行对应操作,运行界面如图1所示。
若用户输入的菜单选项不满足要求(未在1~6范围内),则给出提示信息,提示用户重新输入,直到用户输入正确选项,运行界面如图2所示。
在这里插入图片描述
在这里插入图片描述

根据问题的描述,为实现程序的功能,可按照下述过程完成程序(仅供参考,可自行设计实现过程及方法):
在主函数中定义结构体数组存储五种商品的信息,并使用给出的数据对该数组进行初始化,而后调用cal函数进行计算。
为方便用户选择,应提供良好的操作界面供用户使用,根据不同的要求进入到对应的功能模块。执行完某个功能后,应重新显示菜单,因此可定义显示菜单函数showMenu,并将该函数的调用置于循环结构中。
为实现根据用户的不同输入(共6个)调用对应函数,应采用多分支结构,可使用switch语句或else if语句实现。为实现多次输入,应将将菜单的显示、用户对菜单选项的输入及各个功能模块的调用置于一个循环结构,当输入为6时,结束该循环。
输入待查找商品的代码,再调用查找函数search进行查找,若找到,调用output函数输出该商品的信息,否则输出未找到的提示信息。
四、主要技术问题的描述
根据三的分析与描述,主要问题在于:
结构体类型的构造(struct PRO)
为表示商品的完整信息,该类型应包括以下成员:代码(int code)、名称(char name[20]) ,总量(int amount) ,单价(double price),销售量(int sale1),商品的库存量(int stock),销售额(double sale2)。
函数的参数传递问题
由于该程序是对结构体数组的操作,因此使用传递地址的方法,并传递数组长度。以查找函数为例,该函数的原型说明语句为:int search(PRO s[],int n ,int x); ,即在长度为n的s数组中查找代码为x的商品,若找到,则返回该商品的下标,否则返回-1。形参分别表示结构体数组,数组长度及待查商品的代码。
查询后如何调用output函数只输出一种商品的信息
已知output函数的原型说明语句为: void output(PRO s[],int n); ,因此若要输出下标为k的一个商品的信息, 调用形式应为:output(s+k, 1); ,其中,s为结构体数组名,k为调用查询函数search后返回的商品下标,1表示输出商品的个数。

测试样例

5
10120 HaierCon 2998 155 55
10564 IPodMP3 1250 245 32
11254 SegaHDisk 655 120 20
15826 IBMLapgtop 8188 80 15
18257 SontDigtC 3588 150 29

运行结果

在这里插入图片描述
这个课设还有一点不足,就是在每个商品的名字的处理,无法处理空格,更改的话可以通过循环、getchar改一下。

职工工资信息管理系统

题干信息

在这里插入图片描述

代码
//
//  main.cpp
//  ZSR
//
//  Created by 陈冉飞 on 2019/6/21.
//  Copyright © 2019 陈冉飞. All rights reserved.
//

//#include <bits/stdc++.h>
#include<iostream>
#include<iomanip>
using namespace std;
#define name_max_length 100
//宏定义最多的商品数
#define type_total_max 50
#define gender_max_length 10

struct goods{
    int code;
    char name[name_max_length];
    char gender[gender_max_length];
    float salary;
};

//排序函数1
int sort1(goods g[],int type_total){
    int pos = 0,max_salary = -0xffffff;
    for (int i = 0; i<type_total; i++) {
        if (g[i].salary > max_salary) {
            pos = i;
            max_salary = g[i].salary;
        }
    }
    return pos+1;
}

//排序函数2
int sort2(goods g[],int type_total){
    int pos = 0,min_salary = 0xffffff;
    for (int i = 0; i<type_total; i++) {
        if (g[i].salary < min_salary) {
            pos = i;
            min_salary = g[i].salary;
        }
    }
    return pos+1;
}

//查询函数
int search(goods g[],int type_total,char temname[]){
    for (int i = 0; i<type_total; i++) {
        if (strcmp(g[i].name, temname) == 0) {
            return i+1;
        }
    }
    return -1;
}

//汇总函数
int total(goods g[],int type_total){
    int sum = 0;
    for (int i = 0; i<type_total; i++) {
        sum+=g[i].salary;
    }
    return sum;
}

//显示函数
void output(goods g[],int type_total){
    cout<<"      工号               姓名         性别       月工资  "<<endl;
    for (int i = 0; i<type_total; i++) {
        cout<<setw(10)<<g[i].code;
        printf("%20s",g[i].name);
        printf("%10s",g[i].gender);
        cout<<setw(10)<<g[i].salary<<endl;
    }
}

//显示菜单函数
void showMenu()
{
    cout<<"******************************"<<endl;
    cout<<"请输入1—6内的数字"<<endl;
    cout<<"1  显示所有职工的信息"<<endl;
    cout<<"2  查找并输出月工资最高值"<<endl;
    cout<<"3  查找并输出月工资最低值"<<endl;
    cout<<"4  计算并输出所有职工月工资平均值"<<endl;
    cout<<"5  查找并输出姓名为制定"<<endl;
    cout<<"6  结束"<<endl;
    cout<<"******************************"<<endl;
}


int main(int argc, const char * argv[]) {
    
    //文件输入
//    freopen("测试文档名字.txt", "r", stdin);
    
    goods g[type_total_max] = {0};
    int type_total;
    cout<<"请输入工人总数"<<endl;
    cin>>type_total;
    
    //输入信息和计算库存量、销售额的部分
    for (int i = 0; i<type_total; i++) {
        //提示输入
        cout<<"请依次输入工人工号、姓名、性别、月工资"<<endl;
        cin>>g[i].code;
        scanf("%s",g[i].name);  //暂时还不能输入有空格的字符串
        scanf("%s",g[i].gender);
        cin>>g[i].salary;
    }
    
    //成绩管理系统开始
    int target_num;
    while (true) {
        showMenu();
        cout<<"请输入选项:"<<endl;
        cin>>target_num;
        if (target_num<=6&&target_num>=1) {
            switch (target_num) {
                case 6:
                    return 0;
                case 1:
                    output(g, type_total);
                    break;
                case 2:
                    cout<<"第"<<sort1(g, type_total)<<"个月工资最高"<<endl;
                    break;
                case 3:
                    cout<<"第"<<sort2(g, type_total)<<"个月工资最低"<<endl;
                    break;
                case 4:
                    cout<<total(g, type_total)/type_total<<endl;
                    break;
                case 5:
                    char target_name[name_max_length];
                    cout<<"请输入你想查找的名称"<<endl;
                    scanf("%s",target_name);
                    int target = search(g,type_total,target_name);
                    cout<<"      工号               姓名         性别       月工资  "<<endl;
                    cout<<setw(10)<<g[target].code;
                    printf("%20s",g[target].name);
                    printf("%10s",g[target].gender);
                    cout<<setw(10)<<g[target].salary<<endl;
                    break;
            }
        }else{
            cout<<"输入错误,请输入1-6范围内的数字"<<endl;
        }
    }
    return 0;
}

测试样例

6
2635 acb man 7862
2351 asiacjtg women 10923
7812 opaw women 3252
1234 saoiugr women 6880
2365 alsjdgaew men 9023
8971 oierr men 4772

运行结果

在这里插入图片描述

总结

这两个管理系统大同小异,都是结合结构体再写个排序,其他的都是一些基础语法的运用。

#include #include #include #include #define ID struct id struct id { char name[20]; // xing ming int num; // xue hao int age; // nian ling char sex[2]; // xing bie char xi[20]; // xi bie char zhuan[20]; // zhuan ye char add[20]; // di zhi ID *next; // }; // FILE *fp; // ID *head; int sum_age=0,max_age=0,min_age=100,pc=0; float ave_age=0; ID *creat() { ID *p1,*p2,*head; int pd; p1=p2=head=NULL; printf("\t\t\t 开始输入记录!!!\n"); printf("please input pd:\n"); scanf("%d",&pd); while(pd!=0) { p1=(ID*)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&p1->num); printf("请输入学生的姓名:\n");scanf("%s",p1->name); printf("请输入学生的年龄:\n");scanf("%d",&p1->age); sum_age+=p1->age; if(max_ageage) max_age=p1->age; if(min_age>p1->age) min_age=p1->age; printf("请输入学生的性别:\n");scanf("%s",p1->sex); printf("请输入学生的系别:\n");scanf("%s",p1->xi); printf("请输入学生的专业:\n");scanf("%s",p1->zhuan); printf("请输入学生的地址:\n");scanf("%s",&p1->add); if(head==NULL) { head=p1; p2=p1; } else { p2->next=p1; p2=p1; } printf("please input pd:\n"); scanf("%d",&pd); pc++; } p2->next=NULL; return(head); } /*输入/添加记录*/ ID *insert(ID *head) { ID *temp,*p1,*p2; int pd; start: p1=head; printf("插入操作开始!!!\n"); temp=(ID *)malloc(sizeof(ID)); printf("请输入学生的学号:\n");scanf("%d",&temp->num); printf("请输入学生的姓名:\n");scanf("%s",temp->name); printf("请输入学生的年龄:\n");scanf("%d",&temp->age); printf("请输入学生的性别:\n");scanf("%s",temp->sex); printf("请输入学生的系别:\n");scanf("%s",temp->xi); printf("请输入学生的专业:\n");scanf("%s",temp->zhuan); printf("请输入学生的地址:\n");scanf("%s",temp->add); if (head==NULL) { head=temp; temp->next=NULL; } else { while(p1!=NULL) { p2=p1; p1=p1->next; } p2->next=temp; temp->next=NULL; } printf("插入末尾成功"); pc++; printf("是否继续插入 1.Yes 2.No;\n"); scanf("%d",&pd); if(pd==1) goto start; return (head); } /*删除学生记录*/ ID *delet(ID *head) { ID *p1,*p2; int num; printf("请输入要删除的学生的学号:");scanf("%d",&num); p1=head; if (head==NULL) { printf("没有记录\n"); goto end; } while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { if (p1==head) head=p1->next; else p2->next=p1->next; printf("删除成功!!!\n"); pc--; //free(p1); //free(p2); } end:return head; } /*查找学生记录*/ ID *search(ID *head) { ID *p1,*p2; int num; printf("请输入要查找的学生的学号:");scanf("%d",&num); p1=head; while(num!=p1->num && p1!=NULL) { p2=p1;p1=p1->next; } if(num==p1->num) { printf("学生的学号:%d\n",p1->num); printf("学生的姓名:%s\n",p1->name); printf("学生的年龄:%d\n",p1->age); printf("学生的性别:%s\n",p1->sex); printf("学生的系别:%s\n",p1->xi); printf("学生的专业:%s\n",p1->zhuan); printf("学生的地址:%s\n",&p1->add); //free(p1); //free(p2); } return head; } /*按学号查询学生记录进行修改*/ ID *modify_num(ID *head) { ID *p; int i,m,n,num; start: printf("请输入要修改的学生的学号:"); scanf("%d",&num); p=head; while(p!=NULL ) { if(num==p->num) { m=1; while(m==1) { m=0; printf("\t\t 1.修改学生的学号\n"); printf("\t\t 2.修改学生的姓名\n"); printf("\t\t 3.修改学生的年龄\n"); printf("\t\t 4.修改学生的性别\n"); printf("\t\t 5.修改学生的系别\n"); printf("\t\t 6.修改学生的专业\n"); printf("\t\t 7.修改学生的地址\n"); printf("请选择(1--7):"); scanf("%d",&i); switch( i ) { case 1 : printf("请输入修改后的学号:"); scanf("%d",&p->num); break; case 2: printf("请输入修改后的姓名:"); scanf("%s",p->name); break; case 3: printf("请输入修改后的年龄:"); scanf("%d",&p->age); break; case 4: printf("请输入修改后的性别:"); scanf("%s",&p->sex); break; case 5: printf("请输入修改后的系别:"); scanf("%s",p->xi); break; case 6: printf("请输入修改后的专业:"); scanf("%s",p->zhuan); break; case 7: printf("请输入修改后的地址:"); scanf("%s",p->add); break; default: printf("输入错误,请重新输入"); } } break; } p=p->next; } printf("是否继续修改其他学生情况(1改 2不改):"); scanf("%d",&n); if(n==1)goto start; else return head; } /*退出程序*/ void ask_age() { if(pc==0) { printf("没有记录\n"); return ; } ave_age=float(sum_age*1.0/pc); printf("%f\n",ave_age); printf("%d\n",max_age); printf("%d\n",min_age); } /*显示结果函数*/ void print(ID *head) { ID *p; p=head; printf("\t\t\t*****************\n"); printf("显示结果是:\n"); if(head!=NULL) do { printf("%10d%10s%10d%10s%10s%10s%10s\n",p->num,p->name,p->age,p->sex,p->xi,p->zhuan,p->add); p=p->next; } while(p!=NULL); } void main() { ID *head; int choise; printf("\t\t\t* * * * 李林C语言课设* * * *\n"); while(1) { printf("\t\t 学生信息管理系统\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("\t\t 1.建立文件\n"); printf("\t\t 2.插入数据\n"); printf("\t\t 3.删除数据\n"); printf("\t\t 4.修改记录\n"); printf("\t\t 5.搜索记录\n"); printf("\t\t 6.求年龄\n"); printf("\t\t 0.退出\n"); printf("\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请选择(0-6):"); scanf("%d",&choise); switch(choise) { case 1: head=creat(); print(head); break; case 2: head=insert(head); print(head); break; case 3: head=delet(head); print(head); break; case 4: head=modify_num(head); print(head); break; case 5:search(head); print(head); break; case 6:ask_age(); break; case 0: exit(0); break; default :printf("输入错误,请重新输入!\n"); } } } ★★★★★★★★★★★★★★★★★★★★★★★★★★★ #include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "stdlib.h" #define null 0 struct record { char name[20]; char phone[20]; char adress[40]; char postcode[10]; char e_mail[30]; }student[500]; struct LinkList { struct record US; struct LinkList *next; }a; struct LinkList *head=null; int num=0; FILE *fp; int menu_select(); int adduser(); int list(); int search(); int display(); int add(); int listbyname(); int dele(); int save(); int exit(); void main() { system("cls"); for(;;) { switch(menu_select()) { case 0:adduser();break; case 1:list();break; case 2:search();break; case 3:display();break; case 4:add();break; case 5:listbyname();break; case 6:dele();break; case 7:save();break; case 8:exit(0); } } } menu_select() { char s[80]; int a; printf("*_* press any key enter menu! *_* \n"); getch(); system("cls"); printf("\t\t********************MENU*********************\n\n"); printf("\t\t 0. 输入记录\n"); printf("\t\t 1. 显示记录 \n"); printf("\t\t 2. 按姓名查找\n"); printf("\t\t 3. 按电话号码查找\n"); printf("\t\t 4. 插入记录 \n"); printf("\t\t 5. 按姓名排序\n"); printf("\t\t 6. 删除记录\n"); printf("\t\t 7. 记录保存文件\n"); printf("\t\t 8. Quit\n"); printf("\t\t***********************************************\n"); do{ printf("\n Enter you choice(0~11):"); scanf("%s",s); a=atoi(s); } while (a11); return a; } adduser() { printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } list() { int i; system("cls"); if(num!=0) { printf("\n\t\t*************** 以下为通讯录所有信息************"); for (i=0;i<num;i++) { printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\t邮编: %s",student[i].postcode); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\t\t"); if (i+1<num) { printf("\n\t\t__________________________"); system("pause"); } } printf("\n\t\t************************************************"); } else printf("\n\t\t通讯录中无任何纪录"); printf("\n\t\t按任意键返回主菜单:"); getch(); return(0); } search() { int mark=0; int i; int a=0; printf("\n\t\t***************** 按姓名查找 *******************"); char name[20]; printf("\n\t\t请输入姓名:"); scanf("%s",name); for(i=a;i<num;i++) { if (strcmp(student[i].name,name)==0) { printf("\n\t\t************* 以下是您查找的用户信息 ***********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); mark++; if ((i+1)<num) { printf("\n\t\t是否继续查找相同名字的用户信息:(y/n)"); if (getch()=='y') { a=i; continue; } else return(0); } else { printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } } if(mark!=0) { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } else { printf("\n\t\t没有相同姓名的用户纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } } display() { int mark=0; int i; int a=0; printf("\n\t\t****************** 按电话查找 ******************"); char phone[10]; printf("\n\t\t请输入电话号码:"); scanf("%s",phone); for(i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==0) { printf("\n\t\t************** 以下是您查找的用户信息 **********"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t************************************************"); printf("\n\t\t按任意键返回主菜单:"); mark++; getch(); return(0); } } if (mark==0) { printf("\n\t\t没有改用户的信息"); printf("\n\t\t按任意键返回主菜单"); getch(); return(0); } return(0); } add() { int i; if ((fp=fopen("student.bin","wb"))==NULL) { printf("\n\t\t文件打开失败"); } for (i=0;i<num;i++) { if (fwrite(&student[i],sizeof(struct record),1,fp)!=1) { printf("\n\t\t写入文件错误!\n"); } printf("\n\t\t**************** 请输入用户信息 ****************\n"); printf("\n\t\t输入姓名:"); scanf("%s",&student[num].name); printf("\n\t\t输入电话号码:"); scanf("%s",&student[num].phone); printf("\n\t\t输入地址:"); scanf("%s",&student[num].adress); printf("\n\t\t输入邮编:"); scanf("%s",&student[num].postcode); printf("\n\t\t输入e-mail:"); scanf("%s",&student[num].e_mail); num++; printf("\n\t\t是否继续添加?(Y/N):"); if (getch()=='y') adduser(); return(0); } fclose(fp); printf("\n\t\t通讯录文件已保存"); printf("\n\t\t按任意键退出程序\n\t\t"); exit(0); return(0); } void deletebyphone() { int i,j; int deletemark=0; char phone[20]; printf("\n\t\t请输入要删除用户电话号码:"); scanf("%s",phone); if(num==0) { printf("\n\t\t对不起,文件中无任何纪录"); printf("\n\t\t按任意键返回主菜单"); getch(); return; } for (i=0;i<num;i++) { if (strcmp(student[i].phone,phone)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } else return; } continue; } if (deletemark==0) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; } } void deletebyname() { int a=0; int findmark=0; int j; int deletemark=0; int i; char name[20]; printf("\n\t\t请输入要删除用户姓名:"); scanf("%s",name); for (i=a;i<num;i++) { if (strcmp(student[i].name,name)==NULL) { printf("\n\t\t以下是您要删除的用户纪录:"); findmark++; printf("\n\t\t________________________________"); printf("\n\t\t姓名: %s",student[i].name); printf("\n\t\t电话: %s",student[i].phone); printf("\n\t\t地址: %s",student[i].adress); printf("\n\t\te-mail:%s",student[i].e_mail); printf("\n\t\t________________________________"); printf("\n\t\t是否删除?(y/n)"); if (getch()=='y') { for (j=i;j<num-1;j++) student[j]=student[j+1]; num--; deletemark++; printf("\n\t\t删除成功"); if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyname(); return; } if((i+1)<num) { printf("\n\t\t是否继续删除相同姓名的用户信息?(y/n)"); if (getch()=='y') { a=i; continue; } } } else continue; } if ((deletemark==0)&&(findmark==0)) { printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } else if (findmark!=0) { printf("\n\t\t没有重名信息"); printf("\n\t\t没有该用户的纪录"); printf("\n\t\t是否继续删除?(y/n)"); if (getch()=='y') deletebyphone(); return; return; } } dele() { char choic; printf("\n\t\t1-按电话号码删除 2-按姓名删除"); printf("\n\t\t请选择:"); choic=getch(); switch (choic) { case '1':deletebyphone();break; case '2':deletebyname();break; } return(0); } listbyname() { int i,j; struct record tmp; for (i=1;i<num;i++) { if(strcmp(student[i].name,student[i-1].name)<0) { tmp=student[i]; j=i-1; do { student[j+1]=student[j]; j--; }while ((strcmp(tmp.name,student[j].name)=0)); student[j+1]=tmp; } } printf("\n\t\t排序成功,是否显示?(y/n)"); if (getch()=='y') list(); return(0); } save() { int j; FILE*fp; fp=fopen("student.txt","w"); if (fp==NULL) printf("can't open the file."); if(num!=0) { for(j=0;j<num;j++) { fwrite(student,sizeof(student),1,fp); } } printf("保存成功!"); fclose(fp); return(0); }
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值