| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1945 人关注过本帖, 3 人收藏
标题:学生信息录入小程序,大家都来帮忙看看哈!!!
只看楼主 加入收藏
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
结帖率:100%
收藏(3)
已结贴  问题点数:100 回复次数:22 
学生信息录入小程序,大家都来帮忙看看哈!!!
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
struct student
{
long num;            //索引,具有唯一标识不允许重复!!!   
char name[20];
char sex[10];
char brith[15];
char remark[30];
struct student *next;
};


struct student *creat(void)//创建n个同学的链表,以输入NUM==0结束!!!
{
    struct student *p1, *p2;
    struct student *head=NULL;
    int m=0;
    long n;


    for( ; ; )
    {
        p1=(struct student *)malloc(sizeof(struct student));
            printf("      num:");
       scanf("%ld",&n);
            if(n==0)
            {
                    p2->next=NULL;
                       return head;
       
            }
   
    
                
                   p1->num=n;

                   printf("      name:");

              scanf("%s",&p1->name);

                   printf("      sex:");

              scanf("%s",&p1->sex);

                   printf("      brith:");

              scanf("%s",&p1->brith);

                   printf("      remark:");

              scanf("%s",&p1->remark);
           
             
                 if(m==0)
                 { 
                      head=p1;
                 }
                   else
                         p2->next=p1;
                           p2=p1;
                             m++;
                            
        }
return head;
}
struct student *search1(long num,char *name,struct student *h)//查询返回该num所在地址!
{

 struct student *p1;

 int n=1;


 p1=h;
   for(;p1!=NULL;)
   {
      if(p1->num==num||strcmp(p1->name,name)==0)
      {
   
           printf("%-13ld  %-13s  %-13s  %-13s  %-200s\n",h->num,h->name,h->sex,h->brith,h->remark);
                
                               n++;
      }
          if(p1->num==num)
                  return p1;
            p1=p1->next;
      
   }
if(n==1)
{
printf("没有查找到该数据!");
}
  
   
  
  return NULL;  
} 

   struct student *search2(long num,char *name,struct student *h)//返回num所在地址的前一地址!
   {
       struct student *p1, *p2;
     int n=1;

 
     p1=h;
     p2=h;
     if(h==NULL)
     {
         //printf("没有查找到该数据\n");
          return NULL;
           
     }
     if(h->num==num)
     {
           return p2;
     }
       else if(p1->next==NULL)
       {
             if(p1->num==num)
                    {
   
                        //printf("%-13ld  %-13s  %-13s  %-13s  %-20s\n",h->num,h->name,h->sex,h->brith,h->remark);
                           
                          return p2;
                    }
             else
             {
                //printf("没有查找到该数据!");

                            return NULL;   
             }
       }
         else
         {
           
                for(;p1!=NULL;)
                {
                    p2=p1;
                        p1=p1->next;
                   
                    if(p1->num==num)
                    {
   
                        printf("%-13ld  %-13s  %-13s  %-13s  %-20s\n",h->num,h->name,h->sex,h->brith,h->remark);
                           
                          return p2;
                    }

                }
    
           }
  //printf("没有查找到该数据!");

  return NULL;  
}
struct student *add(struct student *p1,struct student *p2,struct student *h)//add插入
{

struct student *p3;

       if(p1!=NULL)
       {
          p3=(struct student *)malloc(sizeof(struct student));
                        printf("      num:");
                    scanf("%ld",&p3->num);
                        printf("      name:");
                    scanf("%s",&p3->name);
                        printf("      sex:");
                    scanf("%s",&p3->sex);
                        printf("      brith:");
                    scanf("%s",&p3->brith);
                        printf("      remark:");
                    scanf("%s",&p3->remark);
                p1->next=p3;
                   p3->next=p2;
                       return h;
       }

  
return h;
}
struct student *delet(struct student *p1,struct student *p2,struct student *h)//delete删除
{
    if(p1==NULL)
    {
        return h;
    }
     if(p1->num==h->num)//1
     {
        if(p1->num==p2->num)
        {
          h=h->next;
             return h;
        }
         else
             p1->next=p2->next;
            
            
    }
        else if(p1==NULL)//z1
            { 
                 printf("\n");//bcz
                     
            }
                  else
                     p1->next=p2->next;
       
return h;
}

 struct student *revise(struct student *p1,struct student *h)//revise修改
{
   struct student *p2;
    
   if(p1==NULL)
   {
        return h;
   }
       //p2=p1;
    p2=(struct student *)malloc(sizeof(struct student));
                        printf("      num:");
                    scanf("%ld",&p1->num);
                        printf("      name:");
                    scanf("%s",&p1->name);
                        printf("      sex:");
                    scanf("%s",&p1->sex);
                        printf("      brith:");
                    scanf("%s",&p1->brith);
                        printf("      remark:");
                    scanf("%s",&p1->remark);
                           p2=p1->next;
                           p1=p2;

return h;
}
int print(struct student *h)//printf输出!
{

   
              for(;h!=NULL;)
              {
                  printf("%-13ld  %-13s  %-13s  %-13s  %-20s\n",h->num,h->name,h->sex,h->brith,h->remark);
                    
                     h=h->next;
              }
   
return 0;
}

void menu1(void)//菜单一
{
    system("CLS");
    printf("\t\t\t单链表C语言实现实例\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| [7] 帮 助()  |\n");
    printf("\t\t| [8] 退 出 |\n");
    printf("\t\t| |\n");
    printf("\t\t| 如未建立新表,请先建立! |\n");
    printf("\t\t| |\n");
    printf("\t\t|————————————————|\n");
    printf("\t\t 请输入你的选项(1-8):");
}
void menu2(void)//菜单2
{
    system("CLS");
    printf("\t\t 请输入你的查询方式(1-2):\n");
    printf("\t\t|————————————————|\n");
    printf("\t\t| [1] 按 学 号 查 询\n");
    printf("\t\t| [2] 按 姓 名 查 询\n");
    printf("\t\t| |\n");
    printf("\t\t| 如未建立新表,请先建立! |\n");
    printf("\t\t|————————————————|\n");
    printf("\t\t 请输入你的选项(1-2):");
}







int main()
{
  int m, choise;
  long num;
  struct student *head, *p1, *p2;
  char name[20], *a="0";

  head=NULL;
  menu1();
  for( ; ; )    
  {
     scanf("%d",&choise);

  switch(choise)
  {
    case 1: head=creat();system("CLS");break;
            case 2: printf("请选择查询方式:");
                    menu2();
                    scanf("%d",&m);
                    if(m==1)
                    {
                    printf("输入你所要查找的人的学号:");
                    scanf("%ld",&num);
                    printf("学号           姓名           性别           生日          备注\n");
                    search1(num,a,head);
                    }
                      else if(m==2)
                      {
                        printf("输入你所要查找的人的姓名:");
                        scanf("%s",name);
                    printf("学号           姓名           性别           生日          备注\n");
                        search1(0,name,head);
                      }
                    printf("\n按回车键回到主菜单。");
                    getchar();
                    getchar();
                    break;
            case 3: printf("学号           姓名           性别           生日          备注\n");//输出表后便于操作!
                    print(head);
                    printf("输入你要在哪个学号后面插入(如在排头插入请输入0):");
                    scanf("%ld",&num);
                    if(num==0)
                    {
                           p1=(struct student *)malloc(sizeof(struct student));
                        printf("      num:");
                    scanf("%ld",&p1->num);
                        printf("      name:");
                    scanf("%s",&p1->name);
                        printf("      sex:");
                    scanf("%s",&p1->sex);
                        printf("      brith:");
                    scanf("%s",&p1->brith);
                        printf("      remark:");
                    scanf("%s",&p1->remark);
                          p1->next=head;
                              head=p1;                         
                   
                    }
                        else
                        {
                               p1=search1(num,a,head);
                                  if(p1==NULL)
                                  {
                                      goto a;
                                  }
                                 p2=p1->next;
                                   head=add(p1,p2,head);
                        }
              a:    printf("\n按回车键回到主菜单!");
                    getchar();
                    getchar();
                    break;
            case 4: printf("学号           姓名           性别           生日          备注\n");//输出表后便于操作!
                    print(head);
                    printf("\n输入你所要删除的人的学号:");
                    scanf("%ld",&num);
                    p1=search2(num,a,head);
                    p2=search1(num,a,head);
                    head=delet(p1,p2,head);
                    printf("\n按回车键回到主菜单!");
                    getchar();
                    getchar();
                    break;
            case 5: printf("学号           姓名           性别           生日          备注\n");//输出表后便于操作!
                    print(head);
                    printf("\n输入你所要修改的人的学号:");
                    scanf("%ld",&num);
                    p1=search1(num,a,head);
                    revise(p1,head);
                   
                    printf("\n按回车键回到主菜单!");
                    getchar();
                    getchar();
                    break;
            case 6: printf("学号           姓名           性别           生日          备注\n");
                    print(head);
                    printf("\n按回车键回到主菜单。");
                    getchar();
                    getchar();
                    break;
            case 7: printf("1.“学号”索引具有唯一标识.不允许重复.系统默认唯一重复时查询时优先显示,不警告!!!\n");
                    printf("2.创建n个同学的链表,当输入NUM为0时结束 !!!\n");
                    printf("3.“姓名”不能为0  !!!\n");
                    printf("4.“插入”“删除”“修改”时输入无效学号系统不予提示保留本次操作前建表内容!!!\n");//已修复!!!
                    printf("5.未建表时不允许使用“删除”功能否则会引起奔溃!!!\n");//已修复!!!
                    printf("6.请按提示正确操作!!!\n");
                    printf("\n按回车键回到主菜单!");
                    getchar();
                    getchar();
                    break;
            case 8: return 0;break;
            default: printf("你输入了非法字符!按回车键回到主菜单。");

  }
                system("CLS");
                    menu1();
                





 }
}呵呵,学习c3个多月了,谢谢论坛里帮助过我的人,自己写的很吃力,但还是坚持写完了,大家帮忙看看,有什么问题帮忙指出来,格式,逻辑的都行哈!!一定虚心接受!
studentLDDNO2.zip (3.01 KB)


[ 本帖最后由 清微御宇 于 2012-5-29 23:15 编辑 ]
搜索更多相关主题的帖子: 录入 信息 color 
2012-05-29 20:25
回首依依
Rank: 7Rank: 7Rank: 7
来 自:苏州
等 级:黑侠
威 望:1
帖 子:193
专家分:524
注 册:2011-12-3
收藏
得分:8 
                                   /*基于C-Free 5.0*/
#include"stdio.h"
#include"stdlib.h"
#include"ctype.h"
#include"process.h"
#include"string.h"
#include"conio.h"
typedef struct node
{
  char name[10];
  char age[3];
  char sex[5];
  char telephonenumber[20];
  char adress[50];
  struct node *link;
}STU;

STU *head=NULL;/*全局变量head,指向链表的头地址*/


/*函数申明*/
STU *Creat();
STU *First_Add(STU *h);/*添加第一个联系人,返回第一个节点的头指针*/
STU *Futher_Add(STU *front);/*添加联系人,返回添加结点的首地址*/
STU *Search(STU *h,char *x);/*查找联系人,返回查找节点的头指针*/
STU *FSearch(STU *h,char *x);/*查找所查联系人的前节点,返回前节点的指针*/
void OutPut(STU *search);/*输出一条记录*/
void Delete(char *x);/*删除一条记录*/
void AllShow(STU *h);/*显示所有联系人*/
void SaveRecord(STU *head);/*将记录保存到c:\通讯录.txt中*/
void End();/*退出函数*/


/*程序的主函数*/
int main()
{
  char s[20];
  int i;
  STU *h=NULL,*search=NULL;
  char _name[10];
  head=Creat();
  while(1)
  {
    system("cls");/*TC2.0中用 clrscr(),以下类似*/
    printf("\t\t-----------**\1欢迎来到通讯录系统\1**--------\n");
    printf("\t\t            版本号:1.0 作者: **           \n");
    printf("\t\t-------------------------------------------\n");
    printf("\t\t-------------------主要功能----------------\n");
    printf("\t\t     1:     \2 |* 添加首个联系人 *| \2      \n");
    printf("\t\t     2:     \2 |*   追加联系人   *| \2      \n");
    printf("\t\t     3:     \2 |*   查找联系人   *| \2      \n");
    printf("\t\t     4:     \2 |*   删除联系人   *| \2      \n");
    printf("\t\t     5:     \2 |* 显示所有联系人 *| \2      \n");
    printf("\t\t     6:     \2 |*   保存到文件   *| \2      \n");
    printf("\t\t     0:     \2 |*     退 出      *| \2      \n");
    printf("\t\t     \3\7 友情提示:请输入0~6来选择功能:");
    do{
    scanf("%s",s);
    i=atoi(s);
    }while(i<0||i>6);/*输入不在0~6之间,重输入*/
    switch(i)
    {
        case 1:system("cls");h=First_Add(head);break;
        case 2:{
                  system("cls");
                  if(head->link==NULL)  printf("\1\7警告:请先创建第一个联系人!\n");
                  else  h=Futher_Add(h);
                  getch();
               }break;
        case 3:{
                  system("cls");
                  printf("\7小提示:请输入您要查找人的姓名:\n");
                  scanf("%s",_name);
                  search=Search(head,_name);
                  if(search!=NULL)
                  {
                    printf("*姓名*     *年龄*     *性别*        *电话号码*     *地址*                 \n");
                    OutPut(search);
                    printf("***********************************结束**********************************\n");
                  }
                  else printf("\7很遗憾,没有查到这个人哪!...\n");
                  getch();
               }break;
        case 4:{
                 system("cls");
                 printf("\7小提示:请输入您要删除人的姓名:\n");
                 scanf("%s",_name);
                 Delete(_name);
                 getch();
               }break;
        case 5:{
                system("cls");
                printf("*姓名*     *年龄*     *性别*        *电话号码*     *地址*                 \n");
                AllShow(head);
                printf("***********************************结束***********************************\n");
                getch();
               }break;
        case 6:system("cls");SaveRecord(head);break;
        case 0:End();break;
    }
 
  }
  return 0;
}


STU *Creat() /*创建头结点,返回头指针*/
{
  STU *h;
  if((h=(STU *)malloc(sizeof(STU)))==NULL)
  {
   printf("\7警告:内存空间无法分配!\n");
   exit(0);
  }
  h->name[0]='\0';
  h->age[0]='\0';
  h->sex[0]='\0';
  h->telephonenumber[0]='\0';
  h->adress[0]='\0';
  h->link=NULL;
  return h;
}


STU *First_Add(STU *h)/*添加第一个联系人,返回第一个节点的头指针*/
{
  STU *s;
  if((s=(STU *)malloc(sizeof(STU)))==NULL)
   {
    printf("\7警告:内存空间无法分配!\n");
    exit(0);
   }
  h->link=s;
  printf("\1请输入以下信息:\n");
  printf("*姓名*     *年龄*     *性别*        *电话号码*     *地址*                 \n");
  printf("-------------------------------------------------------------------------\n");
  scanf("%s%s%s%s%s",s->name,s->age,s->sex,s->telephonenumber,s->adress);
  printf("\2\7 恭喜你,首个联系人创建成功!\2\n");
  printf("\3温馨提示:按任意键继续...");
  getch();
  s->link=NULL;
  return s;
}

STU *Futher_Add(STU *front)/*添加联系人,返回结点的首地址*/
{
   STU *s;
   system("cls");
   if((s=(STU *)malloc(sizeof(STU)))==NULL)
   {
    printf("\7警告:内存空间无法分配!\n");
    exit(0);
   }
   front->link=s;
   printf("*姓名*     *年龄*     *性别*        *电话号码*     *地址*                 \n");
   printf("-------------------------------------------------------------------------\n");
   scanf("%s%s%s%s%s",s->name,s->age,s->sex,s->telephonenumber,s->adress);
   printf("\2\7 恭喜你,一个联系人添加成功!\2\n");
   printf("\3温馨提示:按任意键继续...");
   getch();
   s->link=NULL;
   return s;
}

/*查找函数,返回查找到结点的头指针,若没查到,返回NULL*/
STU *Search(STU *h,char *x)
{
  STU *p;
  char *name;
  system("cls");
  p=h->link;
  while(p!=NULL)
  {
     name=p->name;
     if(strcmp(name,x)==0) return p;
     else p=p->link;
  }
  return p;
}

/*查找函数,返回查找结点前结点的首地址,若没查到,返回最后结点的首地址*/
STU *FSearch(STU *h,char *x)
{
  STU *p,*s;
  char *name;
  system("cls");
  s=h;
  p=h->link;
  while(p!=NULL)
  {
    name=p->name;
    if(strcmp(name,x)==0) return s;
    else
       {
         p=p->link;
         s=s->link;
       }
   }
  return s;
}


void OutPut(STU *search)/*输出一条记录*/
{
  printf("-------------------------------------------------------------------------\n");
  printf("%-12s%-12s%-12s%-15s%-12s\n",search->name,search->age,search->sex,search->telephonenumber,search->adress);
}


void Delete(char *x)/*删除联系人*/
{
  STU *p=NULL,*fp=NULL;
  p=Search(head,x);
  system("cls");
  if(p==NULL) printf("\2通讯录中没有这个人呀!...");
  else{
       fp=FSearch(head,x);
       fp->link=p->link;
       free(p);
       printf("\2\7提示:联系人成功删除!");
      }
}

void AllShow(STU *h)/*显示所有联系人*/
{
  STU *p=h->link;
  while(p!=NULL)
  {
    OutPut(p);
    p=p->link;
  }
}

void SaveRecord(STU *h)/*将记录保存到c:通讯录.txt中*/
{
  STU *p=h->link;
  FILE *fp=NULL;
  printf("\7记录正在保存到C:\\通讯录.txt中……\n");
  if((fp=fopen("C:\\通讯录.txt","w"))==NULL)
  {
    printf("\7文件无法打开哦……\n");/*没打开*/
    exit(1);  /*退出*/
  }
  fprintf(fp,"*姓名*     *年龄*     *性别*        *电话号码*     *地址*                 \r\n");
  fprintf(fp,"-------------------------------------------------------------------------\r\n");
  while(p!=NULL)
  {
   fprintf(fp,"%-12s%-12s%-12s%-15s%-12s\r\n",p->name,p->age,p->sex,p->telephonenumber,p->adress);
   fprintf(fp,"-------------------------------------------------------------------------\r\n");
   p=p->link;
  }
  fclose(fp);
  printf("\n\2\7提示:文件成功保存到C:\\通讯录.txt中!\n");
  getch();
}

void End()/*退出函数*/
{
  system("cls");
  char s[20];
  int i=0;
  printf("\t\t\7您是否将通讯录信息保存到文件啦?\n");
  printf("\t\t\3 1:我已经保存好了啊!\n");
  printf("\t\t\3 2:没呢,请帮我保存!\n");
  printf("\t\t\3 3:我不想保存了……  \n");
  printf("\t\t\1 请选择:");
  do{
     scanf("%s",s);
     i=atoi(s);
   }while(i<1||i>3);
  switch(i)
    {
       case 1:break;
       case 2:SaveRecord(head);break;
       case 3:break;
    }
    exit(0);   
}
我以前写的,交流交流哈。。。
2012-05-29 21:17
于祥
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:5
帖 子:1047
专家分:4132
注 册:2011-4-24
收藏
得分:8 
顶贴的

最基础的往往是你最容易忽略的!
2012-05-29 21:36
清微御宇
Rank: 6Rank: 6
来 自:开封
等 级:侠之大者
威 望:2
帖 子:318
专家分:497
注 册:2012-1-15
收藏
得分:0 
我晕第一次粘贴东西掉太多了!!!!

Stay hungry , Stay foolish!
2012-05-29 23:12
爱你不变心
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2012-5-29
收藏
得分:8 
好强大啊。我观摩观摩
2012-05-30 00:04
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:8 
回复 4楼 清微御宇
呵呵 美女辛苦啦 写了这么多代码

                                         
===========深入<----------------->浅出============
2012-05-30 07:18
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:8 
偶还是说点实话。
虽然程序是完成了,可以撒一下花了,但很多的地方还有bug,代码也不太符合规范。
这个地方能不能不用goto语句呢?
    p1=search1(num,a,head);
    if(p1==NULL)
    {
        goto a;
    }
    p2=p1->next;
    head=add(p1,p2,head);
   }
a:    printf("\n按回车键回到主菜单!");
另外创建链表这个菜单选项你认为留给用户来操作是否合理?能不能把这个可能引起崩溃的操作放入插入功能中?
二.学号可以为负数?(输入二个以上的字母直接导至后面的输入跳过)姓别可以随便输入?生日可以为字母?
程序中似乎没有代码来限定学号的唯一性(通常不能指望用户按规范输入)
三。为什么按姓名查询时,会显示两条相同的数据?
四。代码中还有很多重复代码,可以进一步优化。

当然对一个女生来说,或许要求高了点,能初步完成已经不错了。
如果你是用vc6编译的,还可以按CTRL+A,再按Alt+F8把代码重排一下。
还有清屏是使用的dos命令,无需windows.h头文件,system()函数在stdlib.h中申明的。

[ 本帖最后由 hellovfp 于 2012-5-30 10:53 编辑 ]

我们都在路上。。。。。
2012-05-30 10:48
张志昀
Rank: 1
等 级:新手上路
帖 子:7
专家分:8
注 册:2012-5-30
收藏
得分:8 
好厉害
2012-05-30 23:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:8 
膜拜楼主
2012-05-31 10:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:8 
回复 7楼 hellovfp
我也来说实话,像你这样的淫也太少了。

授人以渔,不授人以鱼。
2012-05-31 10:34
快速回复:学生信息录入小程序,大家都来帮忙看看哈!!!
数据加载中...
 
   



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

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