简单管理系统(框架已有,功能待完善)

闲暇之余所作,功能未完善,望见谅。

    #include <stdio.h> 
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <windows.h>
#include <time.h>
#include <math.h>
#include <unistd.h>

typedef struct Information{//结点 
    char   sName[10];         //姓名 
    char   sPhoneNum[12];     //电话号码 
    char   sID[19];           //身份证 
    char   sPassword[20];     //密码 
    char   sAccount[20];      //账号 
    struct Information *next; //指针域 
}Node;

#define MAX 100
int hh=11;
int pp=11;
int kk=22;
int ll=11;
char ch;
int a[MAX];
int len;
int love;
int cc=0;
Node *head=NULL;
void keep2(); 
void Loading();                                                //加载 
void SamllMune();                                              //小界面 
void login();                                                  //开户 
void registered();                                            //登录 
void read();                                                   //读取   输入缓存存区 
void keep();                                                   //保存   存储道硬盘 
void SuanFaMune();                                            //算法菜单 
void JiSuanJi();                                               //计算器 
void YuanSuanQi();
void Sort();                                                   //排序菜单 
void panyao(); 
void mao(int a[],int len);                                     //冒泡排序 
void QuickSort(int *a,int left,int right);                     //快排 
void InsertSort(int *a,int n);                                  //插入排序 
void HillSorting (int *a,int n);                                //希尔排序 
void xuan(int a[],int len);                                    //简单选择 
void DuiSort(int *a,int left,int right);                       //堆排序 
void HeapAdjust(int *a,int start,int end);                     //堆调整
void swap(int *a,int *b);                                      //该函数用于交换两个变量的值

void TuMune();                                                  //图形打印 
void SanJiaoXing();                                              //三角形 
void XinXing();                                                //心形 
void LingXing();                                                //菱形 
void YuanXing();                                                //圆形 
void QiPan();                                                    //棋盘 

//账号设置 
int main(){
    int start=time(NULL),end;    //运行时间统计 
     Loading();
     system("color 07");
    srand((unsigned)time(NULL)); //时间种子 
    for(;;){//死循环 
        printf("\t\t\t*********************************\n");
        printf("\t\t\t***1.欢迎使用小应用系统1.0版本***\n");
        printf("\t\t\t*********************************\n");
        printf("\t\t\t\t|-------------|\n");//菜单界面 
        printf("\t\t\t\t|----1.开户---|\n");
        printf("\t\t\t\t|----2.登录---|\n");
        printf("\t\t\t\t|----0.退出---|\n");
        printf("\t\t\t\t|-------------|\n");
        scanf(" %c",&ch);//功能选项输入 
        switch(ch){//功能选项判定 
            case '1' :
                login();//开户 
                 break; 
            case '2' :
                registered();//登录 
                break;
            case  '0':
                free(head);//释放空间 
                printf("本次程序运行使用时间为%d",(end=time(NULL))-start);
                exit(0);   //退出 
                break;
            default ://有误提示 
                printf("输入有误,请您重新选择\n");
                break;
        } 
    }
    return 0;
}

void Loading(){
    int k;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),14);
    int i;
    love=88^100;
    printf(">>");
    for(i=1;i<=100;i++)
    {         
              if(i<10)
              printf(">");
              printf("\b\b\b%d%%",i);
              fflush(stdout);
              usleep(20000);
    }
    printf("\n");
    keep2();
    system("pause");
    system("cls");
}

void login(){
    Node *p=head; //变量定义 
    int flag=0;
    char name[10];
    int i=0,j=1;
    char password1[20];
    char password2[20];
    char ID[19];
    char phonenum[12];
    int k=0,num;
    for(;j==1;){//循环输入设置结束条件 
        flag=0;//标签 
    printf("请输入姓名:\n");                  //输入信息 
    scanf("%s",name);
    printf("请输入身账号份证:\n");
    scanf("%s",ID);
    printf("请输入电话号码:\n");
    scanf("%s",phonenum); 
    printf("请输入密码(密码只能由数字和字母构成):\n");
    scanf("%s",password1);
    printf("请输入确认密码:\n");
    scanf("%s",password2);
    while(ID[i]){//ID格式判定                              //有误 
        if(!isdigit(ID[i])){ 
            printf("身份证格式不正确请重新输入\n");
            flag=1;
            break;
        }
         i++;
         k++;
    }
    if(k!=18||flag){
        printf("身份证格式不正确请重新输入\n");
        continue;
    }
    i=0;
    k=0;
    
    while(phonenum[i]){//手机号格式判定 
        if(phonenum[i]<'0'||phonenum[i]>'9'){
            printf("手机号格式不正确请重新输入\n");
            flag=1;
            break;
        }
         i++;
         k++;
    }
    if(k!=11||flag){
        printf("手机号格式不正确请重新输入\n");
        continue;
    }
    i=0;
    
    while(password1[i]){//判定密码格式是否正确 
        if(!isalnum(password1[i])){
            printf("密码格式不对\n请重新输入\n");
            flag=1;
            break;
        }
        i++;
    }
    if(flag){//判定标签是否改变 
        continue;//结束本次循环,重新开始 
    }
    
    i=0;//归零 
    while(password2[i]){//判定密码格式是否正确 
        if(!isalnum(password2[i])){
            printf("密码格式不对\n请重新输入\n");
            flag=1;
            break;
        }
        i++;
    }   
    if(flag){//判定标签是否改变
        continue;//结束本次循环,重新开始
    } 
    
    if(strcmp(password1,password2)!=0){//判定两次密码是否相同 
        printf("两次密码不一致\n请重新输入\n");
        continue;
    } 
    
    while(head!=NULL&&p->next!=NULL){//寻找空白结点 
        p=p->next;
    }
    Node *NewNode=(Node*)malloc(sizeof(Node));//创建结点 
    NewNode->next=NULL;
    if(head==NULL){//将新创的结点和头结点联系起来 
        head=NewNode;
        p=head;
    } 
    else{//指针域指向下一个结点 
        p->next=NewNode;
    }
    sprintf(NewNode->sAccount,"%d%d%d%d",rand()%9000+1000,rand()%9000+1000,rand()%9000+1000,rand()%90+10); //格式转换并存储 
    printf("您的账号%s\n",NewNode->sAccount); //输出账号 
    strcpy(NewNode->sName,name);//将其余信息存储到结点 
    strcpy(NewNode->sID,ID);
    strcpy(NewNode->sPassword,password1);
    strcpy(NewNode->sPhoneNum,phonenum); 
    keep();
    printf("恭喜您开户成功\n");
    system("pause");
    system("cls");
    j=0;
    }
}

void keep2(){//加密 
    FILE *fp;
    fp=fopen("E:\\0.txt","w");
    love=(rand()%9000+1000)^1000;
    fprintf(fp,"%d\n",love);
    fclose(fp);
}

void keep(){//保存信息 
    Node *p=head;
    FILE *fp;//文件类型 
    fp=fopen("./3.txt","a");//打开文件 
    while(p!=NULL){
        fprintf(fp,"%s %s %s %s %s\n",p->sName,p->sAccount,p->sPassword,p->sPhoneNum,p->sID);//输出到硬盘中 
        p=p->next;    //  下一个结点 
    }
    fclose(fp); 
}

void read(){//读取数据 
    Node *p,*p1;
    FILE *fp;
    p=p1=head;
    while(p!=NULL){
        p=p->next;
        free(p1);
        p1=p;
    }
    head=NULL;
    fp=fopen("./3.txt","r");//打开文件
     
    
    while(!feof(fp)){
        Node*New=(Node*)malloc(sizeof(Node));
        fscanf(fp,"%s %s %s %s %s\n",New->sName,New->sAccount,New->sPassword,New->sPhoneNum,New->sID);//输出到硬盘中 
        
        if(head==NULL){
            head=New;
            p=head;
        } 
        else{
            p->next=New;     //指向New(新)结点 
            p=p->next;      //指向下一个结点 
            p->next=NULL;   //设置为尾节点 
        }   
    }
    fclose(fp); //关闭文件 
} 

void registered(){
    system("cls");
    
    char Account[20];
    char password[20];
    Node *p;  
    printf("请输入账号:");
    scanf("%s",Account);
    printf("请输入密码:");
    scanf("%s",password); 
    read();//读取数据库信息
    p=head;//设置一个局部结点暂代链表 
    while(p!=NULL){
        if(strcmp(p->sAccount,Account)==0&&strcmp(p->sPassword,password)==0){
            printf("登陆成功\n");
            SamllMune();           //小界面 
        }
        p=p->next;
    }
    if(p==NULL){
        printf("账号输入有误\n");
    }
     
}

void SamllMune(){
    ll=11;
    for(;ll;){
        system("color 17");
        printf("\t\t********************************\n");
        printf("\t\t***     欢迎使用简省小程序   ***\n");
        printf("\t\t********************************\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("\t\t*********************************\n");
        scanf(" %c",&ch);
        switch(ch){
            case '1' :
                TuMune();
                break;
            case '2' :
            if(love!=cc){
                printf("权限不够\n"); 
            }
            else{
                Sort();
            }
                break;
            case '3':  
                SuanFaMune();
                break;
            case '4' :
                printf("功能暂无\n");
                break;
            case '5' :
                printf("请输入激活码:");
                scanf("%d",cc); 
                if(cc==love){
                    printf("激活成功\n");
                }
                else{
                    printf("激活失败\n"); 
                }
                break;
            case '6' :
                ll=0;
                break;
            default :
                printf("抱歉该选项暂无服务\n");
                break;
        } 
        
    } 
}

void TuMune(){
    int oo=1;
    for(;oo;){
        printf("\t\t\t***********************\n");
        printf("\t\t\t***    1.三角形     ***\n");
        printf("\t\t\t***    2.菱形       ***\n");
        printf("\t\t\t***    3.心形       ***\n");
        printf("\t\t\t***    4.圆形       ***\n");
        printf("\t\t\t***    5.棋盘       ***\n");
        printf("\t\t\t***    6.返回上一级 ***\n");
        printf("\t\t\t***********************\n");
        scanf(" %c",&ch);
        switch(ch){
            case '1' :
                SanJiaoXing();
                break;
            case '2' :
                if(love!=cc){
                printf("权限不够"); 
            }
            else{
                LingXing();
            }
                break;
            case '3' :
                if(love!=cc){
                printf("权限不够"); 
            }
            else{
                XinXing();
                } 
                break;
            case '4' :
                if(love!=cc){
                printf("权限不够"); 
            }
            else{
                YuanXing();
            }
                break;
            case '5' :
                if(love!=cc){
                printf("权限不够"); 
            }
            else{
                QiPan();
            }
                break;
            case '6' :
                oo=0;
                break;
            default :
                printf("功能暂未添加\n");
                break;
        } 
    }
    
}

void SanJiaoXing(){   //三角形 
    int row,col,i,height;
    printf("请输入等腰三角形的高:");
    scanf("%d",&height);
    for(i=1;i<=height;i++)
    {
    for(row=1;row<=height-i;row++)
    printf(" ");
    for(col=1;col<=2*i-1;col++)
    printf("*");
    printf("\n");
}
}

void XinXing()

{
    float x,y,z;
    printf("请输入心形打印的矩阵(宽等于输入的数乘10,高为宽的2倍,z至少大于等于1.2否则无法正常打印)\n"); 
    scanf("%f",&z);
    if(z<1.2||z>5){
        printf("输入大过大(过小)无法正常打印\n"); 
    } 
    for(x=z;x>=-z;x-=0.1){
        for(y=-z;y<=z;y+=0.05){
            if(pow(x*x+y*y-1,3)-x*x*x*y*y<=0){
                Sleep(20);
                printf("*");
            } 
            else{
                printf(" "); 
            } 
        }
        printf("\n");
    }
}

void LingXing(){
    int i,j,num;
    scanf("%d",&num);
    if(num>0){
    if(num%2==0){
        printf("不符合菱形打印\n");
    }
    else{
        num/=2;
        for(i=1;i<=num+1;i++){//上三角 
        for(j=1;j<=num-i+1;j++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){
            printf("*");
        }
         printf("\n");
        }
        
        for(i=num;i>=1;i--){//下三角 
        for(j=0;j<=num-i;j++){
            printf(" ");
        }
        for(j=1;j<=2*i-1;j++){
            printf("*");
        }
         printf("\n");
        }
    }
    
    }
    else{
        printf("输入数据不合理\n"); 
    }
} 

void YuanXing(){
    int x, r, y;
    printf("请输入圆的半径r,圆心:");
    scanf("%d%d%d", &r, &x, &y);
    if (x < r || y < r){
        printf("输入有误\n");
    }
    for (int i = 0; i <= r*r; i++){
        for (int j = 0; j <= r*r + 10; j++){
            if (3.14*(i - x)*(i - x) + (j - y)*(j - y) <= r*r){
                printf("*");
            }
            else{
                printf(" ");
            }
        }
        printf("\n");

    }
} 

void QiPan(){//棋盘 
    int num,i,j;
    printf("请输入打印的棋盘的边长:");
    scanf("%d",&num);
    for(i=0;i<num;i++){
        for(j=0;j<num;j++){
            if((j+i)%2==0){
                printf("■");
            }
            else{
                printf("□");
            }
        }
        printf("\n");
    }
}

void Sort(){
    system("pause");
    int num;
    int i; 
    kk=1;
    for(;kk;) {
    printf("\t\t++++++++++++++++++++++++++++++++++\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("\t\t++++++++++++++++++++++++++++++++++\n");
    printf("\t\t注意:本排序使用范围为20个数的排序\n");
    printf("请输入需排序的数据个数:");
    scanf("%d",&num);
    if(num<=0||num>20){
        printf("记录数据过多(过少),请重新输入\n"); 
        system("pause");
        system("cls");
        continue ; 
    } 
    printf("请输入排序的数据");
    for(i=0;i<num;i++)
    {
        scanf("%d",&a[i]);
    } 
    printf("请输入你的排序方式:");
    scanf(" %c",&ch);
    switch(ch)
    {
        case  '1' :
            mao(a,num);//   冒泡——橙色 
            system("pause");
            system("cls");
            break;
        case  '2' :
        QuickSort(a,0,num-1);//快速排序 
        for(i=0;i<num;i++)
        printf("%5d\t",a[i]); 
        printf("\n");
            system("pause");
            system("cls");
            break;
        case  '3' :
            InsertSort(a,num); //插入排序 
            system("pause");
            system("cls");
            break;
        case  '4' :
            HillSorting (a,num);//希尔排序 
            for(i=0;i<num;i++)
              printf("%5d\t",a[i]); 
              printf("\n");
            system("pause");
            system("cls");
            break;
        case  '5' :
            xuan(a,num);//选择——橙色
            system("pause");
            system("cls");
            break;
        case  '6' :
            DuiSort(a,0,num-1); //堆排序 
            for(i=0;i<num;i++)
              printf("%5d\t",a[i]); 
              printf("\n");
            system("pause");
            system("cls");
            break;
        case  '0' :
            kk=0;
            break;
        default :
            printf("输入有误\n");
            break; 
    }
    }
}

void mao(int a[],int len)//冒泡排序 
{
    int i,t,j,k;
    for(i=0;i<len-1;i++)
    {
        for(j=0;j<len-1;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
        }
    }
    for(k=0;k<len;k++)
    {
        printf("%d\t",a[k]);
    }
    printf("\n");
}

void QuickSort(int *a,int left,int right){//快速排序 
    if(left>=right){//结束条件 
        return ;
    }
    int i=left;//初始化 
    int j=right;
    int key=a[left];
    
    while(i<j){
        while(i<j&&key<=a[j]){
            j--;
        }
        a[i]=a[j];//将查找到比key小的数移到前面 
        while(i<j&&key>=a[i]){
            i++;
        }
        a[j]=a[i];//将查找到比key大的数移到后面 
    }
    a[i]=key;
 QuickSort(a,left,i-1);//自身调用 
 QuickSort(a,i+1,right);//自身调用 
} 

void InsertSort(int *a,int n){//插入排序 
    int temp;
    int i,j;
    
    for(i=1;i<n;i++){//循环趟数 
        temp=a[i];//temp存值 
        for(j=i-1;j>=0;j--){
            if(temp>=a[j]){
                break;
            } 
            else{
                a[j+1]=a[j];//元素移动 
            }
        } 
        a[j+1]=temp;      
    } 
    for(i=0;i<n;i++){
        printf("%5d\t",a[i]); 
    }
    printf("\n"); 
}

void xuan(int a[],int len)//简单选择 
{
    int i,min,j,t;
    for(i=0;i<len-1;i++)
    {
        min=i;
        for(j=i+1;j<len;j++)
        {
            if(a[min]>a[j])
            {
                min=j;
            }
        }
        if(i!=min)
        {
            t=a[min];
            a[min]=a[i];
            a[i]=t;
        }
    }
    for(i=0;i<len;i++)
    {
        printf("%d\t",a[i]);
    }
}

void HillSorting (int *a,int n){//希尔排序 
    int k;
    int i,j,temp;
    k=n/2;//一开始增量等于元素个数/2
    while(k>=1)
    {
        for(i=k;i<n;i++)
        {
            temp=a[i];
            for(j=i-k;j>=0;j=j-k)
            {
                if(temp>a[j])
                {
                    break;
                }
                else
                {
                    a[j+k]=a[j];            
                }               
            }
            a[j+k]=temp;            
        }
        k=k/2;      
    }   
}

void  DuiSort(int *a,int left,int right){//堆排序 
    int i;
    for(i=(right-left+1)/2;i>=left;--i){//调整整个二叉树为最大堆 
        HeapAdjust(a,i,right);
    }
    
    for(i=right;i>left;--i){
        swap(&a[left],&a[i]);
        HeapAdjust(a,left,i-1);
    }
    
}

 void HeapAdjust(int *a,int start,int end){//堆调整 
       int temp=a[start];
       int parent=start,child;//定义两个结点parent和child 
       while(2*parent<=end){
        child=2*parent;
        if(child!=end&&a[child]<a[child+1])
                ++child;
        if(temp>a[child])
                   break;
        else{
            a[parent]=a[child];
           }
           parent=child;
       }
       a[parent]=temp;
 
 } 
 void swap(int *a,int *b){//该函数用于交换两个变量的值
    int temp=*a;
     *a=*b;
     *b=temp; 
 } 
 
 void SuanFaMune(){
    pp=1;
    for(;pp;){
        printf("\t\t\t********************************\n");
        printf("\t\t\t******     1.小数计算器    *****\n");
        printf("\t\t\t******     2.斐波那契数列  *****\n");
        printf("\t\t\t******     3.穷举法        *****\n");
        printf("\t\t\t******     4.进制转换      *****\n");
        printf("\t\t\t******     5.汉罗塔        *****\n");
        printf("\t\t\t******     0.返回上一级    *****\n");
        printf("\t\t\t********************************\n");
        printf("请输入你的选择:");
        scanf(" %c",&ch);
        switch(ch){
            case '1' :
            //  YuanSuanQi();
                break;
            case '2':
                printf("功能暂无\n");
                break;
            case '3' :
                printf("功能暂无\n");
                break;
            case '4' :
                printf("功能暂无\n");
                break;
            case '0' :
                pp=0;
                break;
            default :
               printf("其余功能暂未开发\n");
               break; 
        } 
     }
 } 
 
 
 
 void FuYunSuanQi() {
    
    
 }
 
 
 void FuYuanSuanQi(){
    hh=1;
    float x,y;
    char xuanze;
    for(;hh;){
        printf("\t\t\t========================\n");
        printf("\t\t\t=======   功能   =======\n");
        printf("\t\t\t========================\n");
        printf("\t\t\t====     1.加法     ====\n");
        printf("\t\t\t====     2.减法     ====\n");
        printf("\t\t\t====     3.除法     ====\n");
        printf("\t\t\t====     4.乘法     ====\n");
        printf("\t\t\t====     5.次幂     ====\n");
        printf("\t\t\t====     6.绝对值   ====\n");
        printf("\t\t\t====   0.返回上一级 ====\n");
        printf("\t\t\t========================\n");
        printf("注使用时直接输入符号即可:次幂用“^ ”表示,绝对值用");
        scanf("%f",&x); 
        scanf(" %c",&xuanze);
        switch(xuanze){
            case '+':
                scanf("%d",&y);
                printf("%.2f\n",x+y);
                break;
            case '-':
                scanf("%f",&y);
                printf("%.2f\n",x-y);
                break;
            case '*':
                scanf("%f",&y);
                printf("%.2f\n",x*y);
                break;
            case '/':
                scanf("%f",&y);
                printf("%.2f\n",x/y);
                break;
            case '^':
                scanf("%f",&y);
                printf("%.2f\n",pow(x,(int)y));
                break;
            case '|':
                printf("%.2f",abs(x));
                break;
            case '0':
                break;
            default :
                printf("暂无此功能\n");
                break; 
        } 
     }
 }

猜你喜欢

转载自www.cnblogs.com/yizhichenfen/p/11328184.html