水题

帮其他学校的写了两个大作业(c语言那种)

第一个是个***管理系统

大意就是公司工资管理系统,要计算一下汇率,没什么说的

第二个是一个迷宫,难点在于随机生成迷宫那边,关键是深搜的过程是随机的就可以生成一条道路(这条道路都是可通行的),剩下的点大部分不可通行,当然也不能全不能让人走,否则这条道路就太明显了),想了个办法,如果是那条初始道路就直接铺路,否则很大概率是墙,小概率是道路。

算法还可以继续优化,等有空改成Android的再美化下界面还是不错的。


//工资管理系统
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
int n=0;//数据库中人员的数量
FILE *fp;
FILE *fp2;
int q[]={0,3500,5000,8000,12500,38500,58500,83500};//税的级数
double q1[]={0,0.03,0.1,0.2,0.25,0.3,0.35,0.45};
int q2[]={0,0,105,555,1005,2775,5505,13505};//速算扣除数
typedef struct person//人员,具有收入,
{
   char name[20];//姓名
   char staff_number[20];//员工编号
   double Gross_pay;//税前收入
   double tax;//税收
}person;
person a[100];
int cmp(person c,person d)
{
    return c.Gross_pay<d.Gross_pay;
}
void menu()//主界面
{
    printf("***************************\n");
    printf("*****显示信息请按1*********\n");
    printf("*****信息管理请按2*********\n");
    printf("*****录入信息请按3*********\n");
    printf("*****导出信息请按4*********\n");
    printf("*****工资排序请按5*********\n");
    printf("*****用户退出请按6*********\n");
    printf("***************************\n");
}
void menu2()//基本信息界面
{
    printf("************添加信息请按1********\n");
    printf("************删除信息请按2********\n");
    printf("************修改信息请按3********\n");
}
void menu3()
{
    printf("*******按照姓名删除请按1**********\n");
    printf("*******按照员工编号请按2**********\n");
}
void show()
{
  int i;
  printf("%10s%10s%10s%10s\n","姓名","员工编号","收入","个税");
  for (i=0;i<n;i++)
  printf("%8s%10s   %lf %lf\n",a[i].name,a[i].staff_number,a[i].Gross_pay,a[i].tax);
  printf("\n\n");
}
void add()
{
    int i;
    printf("请输入需要添加的员工姓名:    ");
    scanf("%s",a[n].name);
    printf("请输入需要添加的员工编号:     ");
    scanf("%s",a[n].staff_number);
    printf("请输入添加的收入:             ");
    scanf("%lf",&a[n].Gross_pay);
    for (i=0;i<=7;i++)
    if (q[i]>=a[n].Gross_pay)
    break;
    a[n].tax=(a[n].Gross_pay-q[i-1])*q1[i-1]+q2[i-1];
    n++;
    printf("\n\n");

}
void shanyuangong()
{
   char s[20];
   int i,j,t;
   printf("请输入需要删除的员工姓名:     ");
   scanf("%s",s);
   printf("\n");
   t=0;
   for (i=0;i<n;i++)
   if (strcmp(a[i].name,s)==0)
   {
       for (j=i;j<n-1;j++)
       a[j]=a[j+1];
       t=1;
   }
   n--;
   if (t==0)
   printf("数据库中没有该条信息!\n\n");
}
void shanyuangongbianhao()
{
    char s[20];
    int i,j,t;
   printf("请输入需要删除的员工编号:     ");
   scanf("%s",s);
   printf("\n");
   t=0;
   for (i=0;i<n;i++)
   if (strcmp(a[i].staff_number,s)==0)
   {
       for (j=i;j<n-1;j++)
       a[j]=a[j+1];
       t=1;
   }
   n--;
   if (t==0)
   printf("数据库中没有该条信息!\n");

}
void Delete()
{
    int key;
    menu3();
    do
    {
    printf("请输入你的选择:    ");
    scanf("%d",&key);
    if ((key<=0)||(key>2))
    printf("请输入正确的选择\n");
    else
    {
        if (key==1)
            shanyuangong();//删除员工
        if (key==2)
            shanyuangongbianhao();//删除员工编号
    }
    }while(key<=0||key>2);

}
void change()
{
    char s[20];
    int i,j,t;
    printf("请输入员工的姓名:    ");
    scanf("%s",s);
    t=0;
    for (i=0;i<n;i++)
    if (strcmp(a[i].name,s)==0)
    {
        t=1;
        printf("请输入新的员工编号:   ");
        scanf("%s",a[i].staff_number);
        printf("请输入新的员工收入:    ");
        scanf("%lf",&a[i].Gross_pay);
    }
    if (t==0)
    printf("数据库没有这条信息!\n");



}
void manage()
{
    int i,key;
    menu2();//基本信息界面
    do
    {
    scanf("%d",&key);
    if ((key<=0)||(key>3))
    printf("请输入正确的选择\n");
    else
    switch(key)
    {
        case 1:add();//增加
               break;
        case 2:Delete();//删除
               break;
        case 3:change();//修改信息
    }
    }while(key<=0||(key>3));
}
void luru()
{
    fp=fopen("F:\\1.txt","r");
    while(fscanf(fp,"%s%s%lf",a[n].name,a[n].staff_number,&a[n].Gross_pay)!=EOF)
    {
        n++;
    }
}
void daochu()
{
    int i;
    fp2=fopen("F:\\2.txt","w");
    printf("%10s%10s%10s%10s\n","姓名","员工编号","收入","个税");
    for (i=0;i<n;i++)
    printf("%8s%10s   %lf %lf\n",a[i].name,a[i].staff_number,a[i].Gross_pay,a[i].tax);
}
void paixu()
{
    int i,j;
    sort(a,a+n,cmp);
    show();
}
 int main()
 {
     int key;
     menu();
     do
     {
         printf("请输入你的选择  ");
         scanf("%d",&key);
         if ((key<=0)||(key>6))
         printf("请输入正确的选择\n\n\n");
         else
         {
             switch(key)
             {
                 case 1:show();//展示信息
                        break;
                 case 2:manage();//信息管理
                        break;
                 case 3:luru();//录入信息(编不出英文了)
                        break;
                 case 4:daochu();//导出英文
                        break;
                 case 5:paixu();//排序
                        break;

            }
         }
     }while(key!=6);//当输入6退出
     printf("*****欢迎使用********\n");
     return 0;

 }

//迷宫
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int direction[4];//存储4个方向
int a[105][105];
char s[105][105];
int visit[105][105];
int Time;
int n;//迷宫的行,列
void initdirection()
{
    int i,j,k,ok;
    memset(direction,0,sizeof(direction));
    for (i=0;i<=3;i++)
    {
        j=rand()%4;
        ok=1;
        for (k=0;k<i;k++)
        if (j==direction[k])
        ok=0;
        if (ok)
        direction[i]=j;
        else
        i--;
     }
}
void DFS(int x,int y)
{
    int c[4]={0,0,-1,1};//direction[0,1,2,3]分别对应上下左右
    int d[4]={1,-1,0,0};
    int dx,dy,i,j;
    if ((x==n-1)&&(y==n-1))//如果到终点
    {
    Time=1;
    return;
    }
    initdirection();//随机生成四个方向(其实就是全排列啦~~)
    for (i=0;i<=3;i++)
    {
       dx=x+c[direction[i]];//更新横纵坐标
       dy=y+d[direction[i]];
       if ((dx>=0)&&(dx<n)&&(dy>=0)&&(dy<n)&&(!visit[dx][dy])&&(!Time))
       {
           a[dx][dy]=1;//认为它是通路
           visit[dx][dy]=1;
           DFS(dx,dy);
           if (!Time)
           a[dx][dy]=0;
       }
     }

}
void initsecretmap()//随机生成迷宫
{
  int i,j;
  for (i=0;i<n;i++)
   for (j=0;j<n;j++)
     a[i][j]=0;//一开始标记为不可通行
     memset(visit,0,sizeof(visit));
     a[0][0]=1;
     visit[0][0]=1;//起点标记为可通行
     DFS(0,0);
}
int main()
 {

     int i,j,m,k,t;
     char ch;
     printf("*******欢迎使用+学号的迷宫\n");//此处自行修改........(贴心不)
     printf("请输入迷宫的行数\n");
     scanf("%d",&n);
     srand(time(NULL));
     while((n<=0||n>100))
     {
         printf("请输入正确的数字\n");
         scanf("%d",&n);
     }
     system("cls");
     initsecretmap();//随机生成迷宫,最后应该得到a数组,1就是通路
     for (i=0;i<n;i++)
     for (j=0;j<n;j++)
     {
     if (a[i][j]==0)
     {
     m=rand()%100;
     if (m<=20)
     s[i][j]=' ';
     else
     s[i][j]='#';
     }
     else
     {
         s[i][j]=' ';
     }
     }
     s[0][0]='.';
    for (i=0;i<n;i++)
    {
     for (j=0;j<n;j++)
     printf("%c",s[i][j]);
     printf("\n");
    }
    i=0;
    j=0;
     while((i!=n-1)||(j!=n-1))
      {
          ch=getchar();
          if ((ch=='w')&&(i-1>=0)&&(s[i-1][j]==' '))
          {
              s[i][j]=' ';
              i--;
              s[i][j]='.';
          }
          else
            if ((ch=='s')&&(i+1<n)&&(s[i+1][j]==' '))
          {
              s[i][j]=' ';
              i++;
              s[i][j]='.';
          }
          else if ((ch=='a')&&(j-1>=0)&&(s[i][j-1]==' '))
          {
              s[i][j]=' ';
              j--;
             s[i][j]='.';
          }
          else if ((ch=='d')&&(j+1<n)&&(s[i][j+1]==' '))
          {
              s[i][j]=' ';
              j++;
              s[i][j]='.';
          }
          system("cls");
          for (k=0;k<n;k++)
          {
            for (t=0;t<n;t++)
            printf("%c",s[k][t]);
            printf("\n");
          }
        }
     printf("Yin Win");
     return 0;
      }





你可能感兴趣的:(水题)