标题:计算机专业第一次课程设计好难啊,求解大神帮忙解答~
只看楼主
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
结帖率:100%
已结贴  问题点数:20 回复次数:11 
计算机专业第一次课程设计好难啊,求解大神帮忙解答~
1、通讯录管理系统:
该系统通过文本菜单进行操作,功能包括:创建通讯录、显示记录、查询记录添加记录、删除记录和记录排序等,各功能模块均采用独立的函数来表示,通过主函数直接或是间接调用。
(1)程序如下:
#define N 5
#include <stdio.h>
#include <string.h>
#include <conio.h>
void myprint();
void mycreat(char numtel[N][10],char nametel[N][10],char tel[N][10]);
void mydisplay(char numtel[N][10],char nametel[N][10],char tel[N][10]);
void mysearch(char num[N][10],char name[N][10],char tel[N][10]);
void mymodify(char num[N][10],char name[N][10],char tel[N][10]);
void myadd(char num[N][10],char name[N][10],char tel[N][10]);
void mydelete(char num[N][10],char name[N][10],char tel[N][10]);
void mysort(char num[N][10],char name[N][10],char tel[N][10]);
void sch_num(char num[N][10],char name[N][10],char tel[N][10]);
void sch_name(char num[N][10],char name[N][10],char tel[N][10]);

void main()
{
    char choose,yes_no ;
    char num[N][10],name[N][10],tel[N][10];
    do
    {
        myprint();   /    *显示菜单 */
        printf("                   ");
        choose=getchar();
        switch(choose)
        {
         case '1' :
            mycreat(num,name,tel);
            break ;
          case '2' :
            mydisplay(num,name,tel);
            break ;
          case '3' :
            mysearch(num,name,tel);
            break ;
          case '4' :
            mymodify(num,name,tel);
            break ;
         case '5' :
            myadd(num,name,tel);
            break ;
         case '6' :
            mydelete(num,name,tel);
            break ;
         case '7' :
            mysort(num,name,tel);
            break ;
         case '0' :
            break ;
            default :
            printf("\n             %c为非法选项!\n",choose);
        }
        if(choose=='0')
            break ;
        printf("\n                     要继续选择吗(Y/N)?\n");
        do
        {
            yes_no=getchar();
        } while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
        
    } while(yes_no!='Y'||yes_no!='y');
   
}

void myprint( )  
{  // 显示菜单
    printf("\n\n\n\n\n\n\n");
    printf("                                             \n");
    printf("               请输入选项编号(0--7)          \n");
    printf("               1---创建通讯录                \n");
    printf("               2---显示通讯录                \n");
    printf("               3---查询通讯录                \n");
    printf("               3---查询通讯录                \n");
    printf("               5---添加通讯记录              \n");
    printf("               6---删除通讯记录              \n");
    printf("               7---排通讯记录                \n");
    printf("               0---退出                      \n");
    printf("                                             \n");
}

void mycreat(char num[N][10],char name[N][10],char tel[N][10])
{ //  创建通讯录
    int i ;
    for(i=0;i<N;i++)
    {
        printf("\n");
        printf("请输入第%d个记录:\n",i+1);
        printf("学号:");
        do
        {
            gets(num[i]);
        }while(strcmp(num[i],"")==0); /* 学号不能为空 */
        printf("姓名:");
        gets(name[i]);
        printf("电话号码:");
        gets(tel[i]);
    }
    return ;
   
}

void mydisplay(char num[N][10],char name[N][10],char tel[N][10])
{  // 显示学生的各项信息
    int i ;
    printf("    学号     姓名       电话号码                        \n");
    for(i=0;i<N;i++)
       printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
}

void mysearch(char num[N][10],char name[N][10],char tel[N][10])
{ // 查询方式的选择
    char c ;
    mydisplay(num,name,tel);
    printf("按学号查询(h),还是按姓名查询(m)?");
    c=getchar();
    if(c=='h'||c=='H')
       sch_num(num,name,tel);
      else if(c=='m'||c=='M')
         sch_name(num,name,tel);
         else printf("\n非法字符!\n");
}

void sch_num(char num[N][10],char name[N][10],char tel[N][10])
{  //  按学号查询
    int i,flag=0 ;
    char nm[10];
    printf("\n请输入要查询记录的学号:");
    gets(nm);
    for(i=0;i<N;i++)
    if(strcmp(nm,num[i])==0)
    {
        printf("        学号           姓名         电话号码\n");
        printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        flag=1 ;
    }
    if(flag==0)
    printf("无此人!\n");
}

void sch_name(char num[N][10],char name[N][10],char tel[N][10])
{   //  按姓名查询
    int i,flag=0 ;
    char nam[10];
    printf("\n请输入要查询记录的姓名:");
    gets(nam);
    for(i=0;i<N;i++)
    if(strcmp(nam,name[i])==0)
    {
        printf("          学号              姓名            电话号码\n");
        printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        flag=1 ;
    }
    if(flag==0)
    printf("无此人!\n");
}

void mymodify(char num[N][10],char name[N][10],char tel[N][10])
{  //   修改模块
    int i ;
    char nam[10];
    printf("       学号       姓名          电话\n");
    for(i=0;i<N;i++)
    printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
    printf("请输入要修改记录的姓名:");
    gets(nam);
    for(i=0;i<N;i++)
    if(strcmp(nam,name[i])==0)
    break ;
    if(i==N)
    printf("无此人!\n");
    else
    {
        printf("请输入正确的学号:");
        do
        {  gets(num[i]); } while(strcmp(num[i],"")==0);
        printf("请输入正确的姓名:");
        gets(name[i]);
        printf("请输入正确的电话号码:");
        gets(tel[i]);
        printf("          学号          姓名        电话\n");
        for(i=0;i<N;i++)
        printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
    }
}

void myadd(char num[N][10],char name[N][10],char tel[N][10])
{  // 添加学生信息模块
    int i=0,n ;
    char c ;
    char tempnum[10],tempname[10],temptel[10];
    printf("添加前的记录:\n");
    printf("       学号         姓名        电话号码\n");
    while(strcmp(num[i],"")!=0
    {
        printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        i++;
    }
    n=i ;
    do
    {
        printf("请输入新记录的学号:\n");
        do
        {
            gets(tempnum);
        } while(strcmp(tempnum,"")==0); /* 学号不能为空 */
        printf("请输入新记录的姓名:\n");
        gets(tempname);
        printf("请输入新记录的电话号码:\n");
        gets(temptel);
        for(i=0;i<n;i++)
        if(strcmp(tempnum,num[i])==0||strcmp(temptel,tel[i])==0)
        {
            printf("学号或电话号码重,要重新输入吗(Y/N)?");
            c=getchar();
            putchar('\n');
            break ;
        }
        
        if(i==n)
        {
            strcpy(num[i],tempnum);
            strcpy(name[i],tempname);
            strcpy(tel[i],temptel);
            printf("添加后的记录:\n");
            printf("         学号          姓名              电话号码\n");
            for(i=0;i<n+1;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
            break ;
        }
    } while(c=='y'||c=='Y');
   
}

void mydelete(char num[N][10],char name[N][10],char tel[N][10])
{ // 删除模块
    int i,x ;
    char c,nm[10],nam[10];
    printf("删除前的记录:\n");
    printf("       学号           姓名           电话号码\n");
    for(i=0;i<N;i++
    printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
    printf("按学号删除(h),还是按姓名删除(m)?");
    c=getchar();
    if(c=='h'||c=='H')
    {
        printf("\n请输入要删除记录的学号:\n");
        gets(nm);
        for(x=0;x<N;x++)
           if(strcmp(nm,name[x])==0)
                     break ; /* 说明提前结束循环,找到人 */
           if(x<N)
        {
            for(i=x;i<N-1;i++)
            {
                strcpy(num[i],num[i+1]);
                strcpy(name[i],name[i+1]);
                strcpy(tel[i],tel[i+1]);
            }
            printf("删除后的记录:\n");
            printf("     学号       姓名      电话号码\n");
            for(i=0;i<N-1;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else
        printf("无此人\n");
    }
    else
    if(c=='m'||c=='M')
    {
        printf("\n请输入要删除记录的姓名:\n");
        gets(nam);
        for(x=0;x<N;x++)
        if(strcmp(nam,name[x])==0)
              break ;
        if(x<N)
        {
            for(i=x;i<N-1;i++)
            {
                strcpy(num[i],num[i+1]);
                strcpy(name[i],name[i+1]);
                strcpy(tel[i],tel[i+1]);
            }
            printf("删除后的记录:\n");
            printf("      学号       姓名        电话号码\n");
            for(i=0;i<N-1;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else
        printf("无此人\n");
    }
        else
    printf("\n非法字符\n");
}

void mysort(char num[N][10],char name[N][10],char tel[N][10])
{  //  排序模块
    int j,i,k ;
    char c1,c2,temp[10];
    printf("排序前的记录:\n");
    printf("          学号           姓名            电话号码\n");
    for(i=0;i<N;i++)
    printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
    printf("按学号排序(h),还是按姓名排序(m)?");
    c1=getchar();
    if(c1=='h' || c1=='H')
    {
        printf("\n按升序排序(s),还是按降序排序(j)?");
        c2=getchar();
        if(c2=='s'||c2=='S')
        {
            for(i=0;i<N-1;i++)
            {
                k=i ;
                for(j=i;j<N;j++)
                if(strcmp(name[k],name[j])<0)
                k=j ;
                strcpy(temp,num[k]);
                strcpy(num[k],num[i]);
                strcpy(num[i],temp);
                strcpy(temp,name[k]);
                strcpy(name[k],name[i]);
                strcpy(name[i],temp);
                strcpy(temp,tel[k]);
                strcpy(tel[k],tel[i]);
                strcpy(tel[i],temp);
            }
            printf("排序后的记录:\n");
            printf("           学号       姓名        电话号码\n");
            for(i=0;i<N;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else if(c2=='j' || c2=='J')
        {
            for(i=0;i<N-1;i++)
            {
                k=i ;
                for(j=0;j<N;j++)
                if(strcmp(name[k],name[j])<0)
                k=j ;
                strcpy(temp,num[k]);
                strcpy(num[k],num[i]);
                strcpy(num[i],temp);
                strcpy(temp,name[k]);
                strcpy(name[k],name[i]);
                strcpy(name[i],temp);
                strcpy(temp,tel[k]);
                strcpy(tel[k],tel[i]);
                strcpy(tel[i],temp);
            }
            printf("排序后的记录:\n");
            printf("        学号         姓名            电话号码\n");
            for(i=0;i<N;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else printf("\n非法字符\n");
    }
       else if(c1=='m' || c1=='M') /* 按姓名排序 */
    {
        printf("\n按升序排序(s),还是按降序排序(j)?");
        c2=getchar();
        if(c2=='s'||c2=='S')
        {
            for(i=0;i<N-1;i++)
            {
                k=i ;
                for(j=0;j<N;j++)
                if(strcmp(name[k],name[j])<0)
                k=j ;
                strcpy(temp,num[k]);
                strcpy(num[k],num[i]);
                strcpy(num[i],temp);
                strcpy(temp,name[k]);
                strcpy(name[k],name[i]);
                strcpy(name[i],temp);
                strcpy(temp,tel[k]);
                strcpy(tel[k],tel[i]);
                strcpy(tel[i],temp);
            }
            printf("排序后的记录:\n");
            printf("           学号        姓名        电话号码\n");
            for(i=0;i<N;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else if(c2=='j'||c2=='J')
        {
            for(i=0;i<N-1;i++)
            {
                k=i ;
                for(j=i;j<N;j++)
                if(strcmp(name[k],name[j])<0)
                k=j ;
                strcpy(temp,num[k]);
                strcpy(num[k],num[i]);
                strcpy(num[i],temp);
                strcpy(temp,name[k]);
                strcpy(name[k],name[i]);
                strcpy(name[i],temp);
                strcpy(temp,tel[k]);
                strcpy(tel[k],tel[i]);
                strcpy(tel[i],temp);
            }
            printf("排序后的记录:\n");
            printf("        学号        姓名         电话号码\n");
            for(i=0;i<N;i++)
            printf("%23s%15s%15s\n",num[i],name[i],tel[i]);
        }
        else printf("\n非法字符!\n");
    }
    else printf("\n非法字符!\n");
}
(2)编译直到程序无错误;
(3)运行;
(4)查看运行结果。
搜索更多相关主题的帖子: 计算机专业 include 管理系统 通讯录 课程 
2015-09-03 23:13
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
得分:0 
这第一个程序运行起来里面有错误和死循环,求大神帮忙修改
2015-09-03 23:14
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
得分:0 
1、通讯录管理系统:
该系统通过文本菜单进行操作,功能包括:创建通讯录、显示记录、查询记录、修改记录、添加记录、删除记录和记录排序等,各功能模块均采用独立的函数来表示,通过主函数直接或是间接调用,特别注意的是,通讯录数据采用结构体定义和管理,体会这样做的的优越性。
(1)程序如下:
#define  N   100
#include  <stdio.h>
#include  <string.h>
#include  <conio.h>
struct student
{
    char num[10];
    char name[10];
    char tel[10];
};

/* 函数声明 */
void myprint();/* 显示菜单 */
int mycreat(struct student*p,int n); /* 输入通讯录*/
void mydisplay(struct student*p,int n); /* 显示通讯录 */
void mysearch(struct student*p,int n); /* 查找 */
void mymodify(struct student*p,int n); /* 修改通讯录 */
int myadd(struct student*p,int n); /* 增加通讯录 */
int mydelete(struct student*p,int n); /* 删除 */
void mysort(struct student*p,int n); /* 排序 */
void sch_num(struct student*p,int n); /* 按学号查找 */
void sch_name(struct student*p,int n); /* 按姓名查找 */
void main()
{
    char choose,yes_no ;
    struct student record[N]; /* 存放通讯录信息,共100条 */
    int total ; /* 通讯录总数 */
    do
    {
        myprint();       /* 显示菜单 */
        printf("       请选择:       ");
        choose=getchar();
        switch(choose)
        {
            case '1' :
              total=mycreat(record,N);
              break ;
            case '2' :
              mydisplay(record,total);
              break ;
            case '3' :
              mysearch(record,total);
              break ;
            case '4' :
              mymodify(record,total);
              break ;
            case '5' :
              total=myadd(record,total);
              break ;
            case '6' :
              total=mydelete(record,total);
              break ;
            case '7' :
              mysort(record,total);
              break ;
            case '0' :
              break ;
            default :
              printf("\n           %c为非法选项!\n",choose);
        }
        if(choose=='0')  break ;
        printf("\n                              要继续选择吗(Y/N)?");
        do
{  yes_no=getchar();
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
     }while(yes_no!='Y'||yes_no!='y');
}

void myprint()
{   // 显示菜单信息
    printf("\n\n\n\n\n");
    printf("                                             \n");
    printf("        请输入选项编号(0--7)                 \n");
    printf("               1---创建通讯录                \n");
    printf("               2---显示通讯录                \n");
    printf("               3---查询通讯录                \n");
    printf("               4---修改通讯录                \n");
    printf("               5---添加通讯录              \n");
    printf("               6---删除通讯录              \n");
    printf("               7---排序通讯录                \n");
    printf("               0---退出                      \n");
    printf("                                             \n");
}

int mycreat(struct student*p,int n)
{  // 输入学生信息
   




}

void mydisplay(struct student*p,int n)
{  //   显示学生信息
   
}

void mymodify(struct student*p,int n)
{  // 修改学生信息
   
}

void mysearch(struct student*p,int n)
{  // 查找指定学生
 
}

void sch_num(struct student*p,int n)
{//   按学号查询     
   
}

void sch_name(struct student*p,int n)
{  // 按姓名查询
   
}

int myadd(struct student*p,int n)
{  //  增加学生信息
   
}

int mydelete(struct student*p,int n)
 { //   删除学生信息
   
}

void mysort(struct student*p,int n)
{  // 排序函数
    int j,i,k ;
    char c1,c2 ;
    struct student temp ;
    printf("排序前的记录:\n");
    printf("          学号           姓名            电话号码\n");
    for(i=0;i<n;i++)
    printf("%23s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
   
    printf("按学号排序(h),还是按姓名排序(m)?");
    c1=getchar();
    if(c1=='h'||c1=='H')
    {
        printf("\n按升序排序(s),还是按降序排序(j)?");
        c2=getchar();
        /* 升序 */
        if(c2=='s'||c2=='S')
        {
            for(i=0;i<n-1;i++)
            {
                k=i ;
                for(j=i;j<n;j++)
                if(strcmp(p[k].name,p[j].name)<0)
                k=j ;
                temp=p[k];
                p[k]=p[i];
                p[i]=temp ;
               
            }
            printf("排序后的记录:\n");
            printf("      学号        姓名        电话号码\n");
            for(i=0;i<n;i++)
            printf("%23s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
        }
        /* 降序 */
        else if(c2=='j'||c2=='J')
        {
            for(i=0;i<n-1;i++)
            {
                k=i ;
                for(j=0;j<n;j++)
                if(strcmp(p[k].name,p[j].name)<0)
                k=j ;
                temp=p[k];
                p[k]=p[i];
                p[i]=temp ;
               
            }
            printf("排序后的记录:\n");
            printf("       学号       姓名        电话号码\n");
            for(i=0;i<n;i++)
            printf("%23s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
        }
        else printf("\n非法字符\n");
    }
 
    else if(c1=='m'||c1=='M')   /* 按姓名排序 */
    {
        printf("\n按升序排序(s),还是按降序排序(j)? ");
        c2=getchar();
        
        if(c2=='s'||c2=='S')
        {
            for(i=0;i<n-1;i++)
            {
                k=i ;
                for(j=0;j<n;j++)
                if(strcmp(p[k].name,p[j].name)<0)
                k=j ;
                temp=p[k];
                p[k]=p[i];
                p[i]=temp ;
            }
            printf("排序后的记录:\n");
            printf("     学号        姓名         电话号码\n");
            for(i=0;i<n;i++)
            printf("%23s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
        }
        /* 降序 */
        else if(c2=='j'||c2=='J')
        {
            for(i=0;i<n-1;i++)
            {
                k=i ;
                for(j=i;j<n;j++)
                if(strcmp(p[k].name,p[j].name)<0)
                k=j ;
                temp=p[k];
                p[k]=p[i];
                p[i]=temp ;
               
            }
            printf("排序后的记录:\n");
            printf("        学号        姓名       电话号码\n");
            for(i=0;i<n;i++)
            printf("%23s%15s%15s\n",p[i].num,p[i].name,p[i].tel);
        }
        else printf("\n非法字符!\n");
    }
    else printf("\n非法字符!\n");
}
(2)编译直到程序无错误;
(3)运行;
(4)查看运行结果。
2015-09-03 23:14
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
得分:0 
第二个是换了一种结构体,并从中抽取了一部分代码,需自己补充完整
2015-09-03 23:15
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
得分:0 
顶一顶上去。。。。
2015-09-04 21:49
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
换了结构体顺手换成链表吧

剑栈风樯各苦辛,别时冰雪到时春
2015-09-04 21:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
平时总不见人训练,临急抱佛脚。

授人以渔,不授人以鱼。
2015-09-04 22:06
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:0 
回复 7楼 TonyDeng
T版都不给抱

剑栈风樯各苦辛,别时冰雪到时春
2015-09-04 22:08
CC小白313
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2015-9-3
得分:0 
回复 7楼 TonyDeng
不是,我们大一写的程序都挺简单的,第一次见这么大的程序,所以有点手足无措,想找个人指点一下
2015-09-04 23:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
这个不算大啦,属于跳一跳够得着那种,不跳当然不行。问题逐个解决,不要妄想一步登天,任何事都是慢慢积累的。本来就应从初学开始就死盯一个课题,做到底,最忌那种什么题目都做、还与实用不沾边的教学法。

授人以渔,不授人以鱼。
2015-09-05 22:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456991-1-1.html




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

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