⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 源程序.c

📁 本程序用于简单的成绩管理,如多学生成绩的输入,,查找,插入,和排序,并能保存并调出以输入的文件进行处理等。
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "stdio.h"    /*I/O函数*/
#include "stdlib.h"   /*其它说明*/
#include "string.h"   /*字符串函数*/
#include "conio.h"   /*屏幕操作函数*/
#include "mem.h"   /*内存操作函数*/
#include "ctype.h"   /*字符操作函数*/
#include "alloc.h"   /*动态地址分配函数*/
typedef struct tx   /*定义数据结构*/
{
   char no[11];
   char name[15];
   char unit[20];
   char tel[11];
   struct t *next;
 }ADDRESS;
/*以下是函数原型*/
ADDRESS  *init();      /*初始化函数*/
ADDRESS *create();   /*创建链表*/
ADDRESS *delete(ADDRESS *h);   /*删除记录*/
void print(ADDRESS *h);   /* 显示所有记录*/
void search(ADDRESS *h);    /*查找*/
void save(ADDRESS *h);     /*保存*/
ADDRESS *load();        /*读入记录*/
ADDRESS *insert(ADDRESS *h);   /*插入记录*/
void copy();            /*复制文件*/
ADDRESS *sort(ADDRESS *h);    /*排序*/
void search2(ADDRESS *h); /*按号码查找*/
int menu_select();            /*菜单函数*/
/******主函数开始*******/
main()
{  int i;
   ADDRESS *head;     /*链表定义头指针*/
   int n=0;/*链表定义头指针*/
   char num,pass[7],code[7],nouse;
   FILE *fp;
   head=init();          /*初始化链表*/
   clrscr();
   fp=fopen("password.txt","r");/*检测是否需要输入密码*/
   if((fp==NULL)||(feof(fp))) {fclose(fp);goto loop;}/*不需要*/
   else  /*需要*/
   {printf("Please enter your 6 bit password:");/*核对密码*/
    scanf("%s",code);
    fgets(nouse,7,fp);
    fgets(pass,7,fp);
    printf("\n");
    while(strcmp(code,pass)!=0) /*密码不正确要求重输,3次不对则退出*/
   {if(n>1) exit(0);
    printf("error,enter your password again:");
    scanf("%s",code);
    n++;
    }
    fclose(fp);
    goto loop;
}


loop:for(;;)             /*无限循环*/
   {
      switch(menu_select())     /*调用主菜单函数,返回值整数作开关语句的条件*/
      {                     /*值不同,执行的函数不同,break 不能省略*/
     case 0:head=init();break;
     case 1:head=create();break;
     case 2:print(head);break;
     case 3:search(head);break;
     case 4:search2 (head);break;
     case 5:head=insert(head);break;
     case 6:head=delete(head);break;
     case 7:head=load();break;
     case 8:save(head);break;
     case 9:copy();break;
     case 10:head=sort(head);break;
     case 11:inputcode();break;
     case 12:exit(0);
      }
   }
}


/*菜单函数,返回值为整数*/
menu_select()
{
   char *menu[]={"  ***************MENU*************",  /*定义菜单字符串数组*/
   " 0. init list",    /*初始化*/
   " 1. Enter list (enter '#'to end)-",   /*输入记录*/
   " 2. Print list",  /*显示链表中的记录*/
   " 3. Search record ",       /*查找记录*/
   " 4. Search by Tel",   /*按号码查找*/
   " 5. Insert record to list",          /*插入记录到表中*/
   " 6. Deltet record",   /*删除记录*/
   " 7. Load the file",    /*读取记录*/
   " 8. Save the file",        /*保存记录*/
   " 9. copy the file to new file",   /*复制文件*/
   " 10.Sort to make new file",   /*排序*/
   " 11.Set password ",   /*设置动态密码*/
   " 12.Exit   ",/*退出*/
   "  **********************************",
   "      "};
   char s[3];       /*以字符形式保存选择号*/
   int c,i;
   gotoxy(1,1);
   printf("press anykey to enter menu") ;
   getch();  
   clrscr();  
   gotoxy(1,1);                    
   for(i=0;i<16;i++)       /*输出主菜单数组*/
   {
      gotoxy(10,i+1);
      cprintf("%s",menu[i]);
   }
  
   gotoxy(10,21);       /*移动光标*/
   do{
      printf("\n     Enter you choice(0~12):");    /*在菜单窗口外显示提示信息*/
      scanf("%s",s);           /*输入选择项*/
      c=atoi(s);            /*将输入的字符串转化为整形数*/
   }while(c<0||c>12);    /*选择项不在0~12之间重输*/
   return c;              /*返回选择项,主程序根据该数调用相应的函数*/
}
ADDRESS *init()
{
   return NULL;
}



/*创建链表*/
ADDRESS *create()
{
   int i; int s;
   ADDRESS *head=NULL,*info;  /* ADDRESS指向结构体的指针*/
   for(;;)
   {
      info=(ADDRESS *)malloc(sizeof(ADDRESS));  /*申请空间*/
      if(!info)   /*如果指针info为空*/
      {
     printf("\nout of memory");   /*输出内存溢出*/
     return NULL;           /*返回空指针*/
      }
      inputs("Enter name:",info->name,15); /*输入姓名,并进行校验*/
      if(info->name[0]=='#') break;    /*如果姓名首字符为#则结束输入*/
      inputs("Enter unit:",info->unit,20);
      inputs("Enter tel:",info->tel,11);
      info->next=head; /*将头结点做为新输入结点的后继结点*/
      head=info;    /*新输入结点为新的头结点*/
   }
   return(head);   /*返回头指针*/
}



/*输入字符串*/
inputs(char *prompt, char *s, int count)
{
   char p[255];
   do{
      printf(prompt);  /*显示提示信息*/
      scanf("%s",p);  /*输入字符串*/
      if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/
   }while(strlen(p)>count);
   strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/
}

/*输出链表中结点信息*/
void print(ADDRESS *h)
{
   int i=0;     /* 统计记录条数*/
   ADDRESS *p;  /*移动指针*/
   clrscr();     /*清屏*/
   p=h;      /*初值为头指针*/
   printf("\n\n\n******************************ADDRESS********************************\n");
   printf("|Rec|      Name     |        Units       |    Tel    |\n");
   printf("|---|---------------|--------------------|-----------|\n");
   while(p!=NULL)
   {
       i++;
       printf("|%3d|%-15s|%-20s|%-11s|\n", i,p->name,p->unit,p->tel);
       p=p->next;
   }
   printf("**********************************end*********************************\n");
}


/*删除记录*/
ADDRESS *delete(ADDRESS *h)
{
   ADDRESS *p,*q;  /*p为查找到要删除的结点指针,q为其前驱指针*/
   char name[11];
   clrscr();       /*清屏*/
   printf("Please input you want to deleted name\n");      /*显示提示信息*/
   scanf("%s",name);   /*输入要删除记录姓名*/
   q=p=h;    /*给q和p赋初值头指针*/
   while(strcmp(p->name,name)&&p!=NULL)   /*当记录的姓名不是要找的,或指针不为空时*/
   {
      q=p;       /*将p指针值赋给q作为p的前驱指针*/
      p=p->next;      /*将p指针指向下一条记录*/
   }
   if(p==NULL)     /*如果p为空,说明链表中没有该结点*/
      printf("\nlist  no have name %s \n",name);
   else       /*p不为空,显示找到的记录信息*/
   {
      printf("******************************ADDRESS********************************\n");
      printf("|      Name     |        Units       |    Tel    |\n");
      printf("|---------------|--------------------|-----------|\n");
      printf("|%-15s|%-20s|%-11s|\n",p->name,p->unit,p->tel);
      printf("***********************************end*******************************\n");
      getch();      /*压任一键后,开始删除*/
      if(p==h)    /*如果p==h,说明被删结点是头结点*/
     h=p->next;     /*修改头指针指向下一条记录*/
      else
     q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
      free(p);          /*释放p所指结点空间*/
      printf("\n have deleted name %s \n",name);
      printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
   }
   return(h);      /*返回头指针*/
}


/*查找记录*/
void search(ADDRESS *h)
{
   ADDRESS *p;    /*  移动指针*/
   int i[11];    /*存放姓名的字符数组*/
   clrscr();    /*清屏幕*/
   printf("please enter name for search\n");
   scanf("%s",i);    /*输入姓名*/
   p=h;    /*将头指针赋给p*/
   while(strcmp(p->name,i)&&p!=NULL)  /*当记录的姓名不是要找的,或指针不为空时*/
   p=p->next;     /*移动指针,指向下一结点*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -