| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1839 人关注过本帖, 1 人收藏
标题:记录下我最近学习写的程序,新手,,分享下。
取消只看楼主 加入收藏
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
程序代码:
[color=#008000]//下面是我上周写的一个销售管理系统,感觉不太好,有点烂,求大虾指教。。


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define MAX 1000
#define PERSON 4+1
typedef struct Time{
    int year;
    int month;
    int day;
}DATA;
struct Product{
    int number;      //商品代号
    char name[20];   //商品名称   
    char Tran[MAX];    //交易类型  S为售出,J为进货
    int weight;      //商品重量
    int total;       //商品库存量
    int sales;           //一种商品的销售量
    int saler[PERSON];   //销售员售出一种产品总和
    DATA time[MAX];      //交易时间
    int single[MAX];    //单笔交易的数量
    int Trader[MAX];    //交易人员代号
}product[MAX];
struct Product temp[100];   //排序时的中间变量
int N=6;
int total_sale[PERSON][PERSON]={{0},{0,1,2,3,4}};  //每位销售员售出全部商品的总和
int pro_number,sal_number,sale;   //依次为产品代号,销售员代号,销售量
int COUNT=0;   //统计总共交易次数
FILE *fp;   
void Inputsales();   //输入信息
void Input_Purchase();
void calu_data();   //销售员销量统计
void output_data();   //输出统计报表
void search_data();   //查询信息
void sort_data(int n);    //产品排序
void menu();     //显示菜单
void Init();    //初始化结构体数组
void save_data();   //保存文件
void read_data();  //读取文件信息
void display();   //输出所有交易信息
void modify();    //修改信息
void search_stock();  //查询库存信息
void main()  //主函数
{
    Init();
      read_data();
    menu();
    save_data();
    printf("谢谢使用!\n");
    system("pause");
}
void Inputsales()   
{
    char ch;
    sale=0;
    system("CLS");   //清屏
    do
    {
        while(1)
        {
            printf("输入销售员代号(1-4):");
            scanf("%d",&sal_number);getchar();
       
            if(sal_number>0&&sal_number<5)
                break;
            printf("\a输入有误,请重新输入\n");
        }
        do
        {
            while(1)
            {
                printf("产品代号:");   
                scanf("%d",&pro_number);
           
                getchar();
                if(pro_number>0&&pro_number<N)
                    break;
                printf("\a输入有误,请重新输入\n");
            }
            product[pro_number].Tran[COUNT]='S';    //赋值为售出
            product[pro_number].Trader[COUNT]=sal_number;
            printf("销售数量:");
            while(scanf("%d",&sale)!=1||sale<0)
            {
                printf("\a输入有误,请重新输入\n");
                printf("销售数量:");
            }
            product[pro_number].single[COUNT]=sale;
            printf("销售年份:");           
            scanf("%d",&product[pro_number].time[COUNT].year);
            while(1)
            {
                printf("销售月份:");
                scanf("%d",&product[pro_number].time[COUNT].month);
                if((product[pro_number].time[COUNT].month>0)&&product[pro_number].time[COUNT].month<13)
                    break;
                printf("\a输入有误\n");
            }
            while(1)
            {
                printf("销售日:");
                scanf("%d",&product[pro_number].time[COUNT].day);
                if(product[pro_number].time[COUNT].day>0&&product[pro_number].time[COUNT].day<32)
                    break;
                printf("\a输入有误\n");
            }
            product[pro_number].total=product[pro_number].total-sale;   //库存量减去销售的数量
            COUNT++;    
            getchar();
            total_sale[0][sal_number]+=sale;   //计算销售员售出产品总和
            product[pro_number].saler[sal_number]=total_sale[0][sal_number];
            product[pro_number].sales+=total_sale[0][sal_number];    //计算售出单种产品数量
            printf("是否继续输入该销量员销量(Y/N):");
            scanf("%c",&ch);
            getchar();
        }while(ch!='n'&&ch!='N');
        system("CLS");
        printf("是否继续输入其他销售员销量(Y/N):");
        scanf("%c",&ch);
        getchar();
    }while(ch!='N'&&ch!='n');
}
void calu_data()  //在第一次输入时能排序,关闭后再读取不能排序
{
    int i,j,index,temp,k;
    for(i=1;i<PERSON;i++)
    {
        index=i;
        for(j=i+1;j<PERSON;j++)
        {
            if(total_sale[0][index]<total_sale[0][j])
                index=j;
            for(k=0;k<2;k++)
            {
                temp=total_sale[k][index];
                total_sale[k][index]=total_sale[k][i];
                total_sale[k][i]=temp;
            }
        }
    }
    printf("每位销售员售出量从高到低为:");
    for(i=1;i<PERSON;i++)
        printf("%4d",total_sale[1][i]);
    putchar('\n');
}
void output_data()
{
    int sum[5]={0},i,j;
    printf("\t销售统计报表\n");
    printf("\t\t\t产品代号\t\t\t销售之和\n");
    printf("销售员代号");
    for(i=1;i<N;i++)
        printf("\t%d",i);
    putchar('\n');
    for(i=1;i<PERSON;i++)
    {
        printf("%5d    ",i);
        for(j=1;j<N;j++)
        {
            printf("   %5d",product[j].saler[i]);
            sum[i]+=product[j].saler[i];
        }
        printf("\t%3d\n",sum[i]);
        sum[0]+=sum[i];
    }
    printf("每种产品之和 ");
    for(i=1;i<N;i++)
        printf("%4d    ",product[i].sales);
    printf("\t总和%4d\n",sum[0]);
}
void sort_data(int n)    
{    
    int i,j,index;    //由于结构体temp在函数内不能定义太大,故在前面定义全局变量,
    for(i=1;i<n;i++)
    {
        temp[i].sales=product[i].sales;
    }
    for(i=1;i<n;i++)
        temp[i].number=i;
    for(i=1;i<n;i++)              //使用选择法排序
    {
        index=i;
        for(j=i+1;j<N;j++)
            if(temp[index].sales<temp[j].sales)
                index=j;
        temp[0].sales=temp[index].sales;
        temp[index].sales=temp[i].sales;
        temp[i].sales=temp[0].sales;
        temp[0].number=temp[index].number;
        temp[index].number=temp[i].number;
        temp[i].number=temp[0].number;
    }   
    printf("产品从高到低为:\n");
    printf("产品代号:");
    for(i=1;i<n;i++)
        printf("%5d",temp[i].number);
    printf("\n产品销量:");
    for(i=1;i<n;i++)
        printf("%5d",temp[i].sales);
}  
void menu()      //显示菜单
{
    int choice;
    while(1)
    {
        printf("===========================================================\n");
        printf("\t\t1.输入销售信息\n");
        printf("\t\t2.统计销售信息\n");
        printf("\t\t3.产品销量排序\n");
        printf("\t\t4.输入进货信息\n");
        printf("\t\t5.按日期查询信息\n");
        printf("\t\t6.修改信息\n");
        printf("\t\t7.查询商品库存信息\n");
        printf("\t\t8.输出所有交易信息\n");
        printf("\t\t9.输出统计报表\n");
        printf("\t\t0.退出系统\n");
        printf("============================================================\n");
        printf("\n\t\t请选择:");
        while(scanf("%d",&choice)!=1||choice<0||choice>9)
        {
            getchar();
            printf("输入有误,请重新输入\n");
            printf("请选择(0-9):");
        }
        switch(choice)
        {
        case 1:Inputsales();break;
        case 2:calu_data();break;
        case 3:sort_data(N);break;
        case 9:output_data();break;
        case 5:search_data();break;
        case 4:Input_Purchase();break;
        case 8:display();break;
        case 6:modify();break;
        case 7:search_stock();break;
        }
        if(choice==0)
        {
            break;
        }
        system("pause");    //系统调用,暂停
        system("CLS");
    }
}
void Init()                    //对结构体变量初始化
{
    int i,j;
    for(i=1;i<N;i++)
    {
        memset(product[i].single,0,MAX);
        memset(product[i].Trader,0,MAX);
        product[i].sales=0;  
        product[i].number=i;
        product[i].total=0;
        for(j=0;j<MAX;j++)
        {
            product[i].time[j].year=2000;
            product[i].time[j].month=1;
            product[i].time[j].day=1;
        }


    }
}
void search_data()
{
    int y,m,d,i,j;
    scanf("请输入要查找的日期");
    printf("销售年份:");
    scanf("%d",&y);
    while(1)          //控制输入月份的有效性,下同
    {
        printf("销售月份:");
        scanf("%d",&m);
        if(m>0&&m<13)
            break;
        printf("\a输入有误\n");
    }
    while(1)
    {
        printf("销售日:");
        scanf("%d",&d);
        if(d>0&&d<32)
            break;
        printf("\a输入有误\n");
    }
    printf("\t交易日期--------交易类型--------交易数量--------交易人员\n");
    for(i=1;i<N;i++)
        for(j=0;j<COUNT;j++)
            if(y==product[i].time[j].year&&m==product[i].time[j].month&&d==product[i].time[j].day)
            {
                printf("\t%d-%d-%d",y,m,d);
                if(product[i].Tran[j]=='S')
                    printf("\t售出");
                else printf("\t进货");
                printf("\t\t%d\t\t%3d\n",product[i].single[j],product[i].Trader[j]);
            }
}
void Input_Purchase()
{
    int n,amount,Trader1;    //n为购买产品的代号,amount为购买的数量
    int y,m,d;   //购买的日期
    char c,ch1;    //ch1确定信息是为Y 否为N, c为是否继续输入
    while(1)
    {

   
        printf("输入操作人代号:");
        scanf("%d",&Trader1);
        getchar();
        printf("输入购入产品的代号:");
        scanf("%d",&n);
        printf("购入的数量:");
        scanf("%d",&amount);
        printf("购入的年月日(如2008-1-1):");
        scanf("%d%*c%d%%*c%d",&y,&m,&d);
        getchar();
        getchar();
        printf("是否录入(Y/N):");
        scanf("%c",&ch1);
        getchar();
        if(ch1=='y'||ch1=='Y')
        {
            product[pro_number].Tran[COUNT]='J';
            product[n].total+=amount;
            product[n].Trader[COUNT]=Trader1;
            product[n].time[COUNT].day=d;
            product[n].time[COUNT].month=m;
            product[n].time[COUNT].year=y;
            COUNT++;
        }
        getchar();
        printf("是否继续输入:(Y/N)");
        scanf("%c",&c);
        getchar();
        if(c=='N'||c=='n')
            break;
    }
}   
void save_data()
{
    int i;
    if((fp=fopen("sale_data","wb"))==NULL)
    {
        printf("打开文件失败\n");
        return;
    }
    for(i=0;i<N;i++)
    {
        if(fwrite(&product[i],sizeof(struct Product),1,fp)==1)
            continue;
        else break;
    }
    if(i>0)
    {
        printf("保存成功\n");
        return;
    }
    system("CLS");
    fclose(fp);

}
void read_data()
{
    int i=0;
    if((fp=fopen("sale_data","ab+"))==NULL)
    {
        printf("初始化文件!\n");
        return;
    }
    else
    {
        while(!feof(fp))
        {
            if(fread(&product[i],sizeof(struct Product),1,fp)==1)
                i++;
        }
    }
    fclose(fp);
}
void display()
{
    int i,j;
    printf("\t=========================所有交易=======================\n");
    printf("\t交易日期--------交易类型--------交易数量--------交易人员\n");
    for(i=1;i<N;i++)
        for(j=0;j<COUNT;j++)
        {
            if(product[i].single[j]!=0)
            {
                printf("\t%d-%d-%d",product[i].time[j].year,product[i].time[j].month,product[i].time[j].day);
                if(product[i].Tran[j]=='S')
                    printf("\t售出");
                else printf("\t进货");
                printf("\t\t%d\t\t%3d\n",product[i].single[j],product[i].Trader[j]);
            }
        }
}
void modify()      //修改信息
{
    int i,tp;    //tp为中间变量
    char ch,ch1;  //ch为确认信息
    while(1)
    {
        printf("输入要修改商品的代号:");
        scanf("%d",&i);
        if(i>N)
            printf("该商品不存在!\n");
        else
        {
            printf("产品总量为:%d\n",product[i].total);
            printf("输入要修改的数量:");
            scanf("%d",&tp);
            printf("是否修改(Y/N):\n");
            getchar();
            scanf("%c",&ch);
            getchar();
            if(ch=='Y'||ch=='y')
            {
                product[i].total=tp;
                printf("修改成功\n");
            }
        }
        printf("是否继续修改(Y/N):");
        scanf("%c",&ch1);
        getchar();
        if(ch=='N'||ch=='n')
            break;
    }

}
void search_stock()  
{
    int number;  //要查询产品的代号

    printf("输入要查询库存产品的代号:");
    scanf("%d",&number);
    getchar();
    if(number>N)
        printf("无此商品!");
    else
        printf("剩余库存:%d\n",product[number].total);
}




            

    


[/color]
2012-02-18 11:32
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
回复 17楼 京都的雨
那那样的话就只能是答对才能退出,但我们在游戏的时候一般都会给定次数的。
2012-02-20 08:23
ZJQLOVELYY
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:105
专家分:166
注 册:2011-8-1
收藏
得分:0 
回复 21楼 oceanyu
这不关那些的事,主要是你想不想学,我在高三毕业那个暑假就自己学,刚开始也是和你一样,先模仿下,会了些就自己写。
2012-02-20 08:33
快速回复:记录下我最近学习写的程序,新手,,分享下。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034010 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved