咕噜小盒 2023-04-01 13:34 采纳率: 25%
浏览 25

将顺序表有关操作封装成头文件来建立病人信息管理系统

题目:

img


头文件代码:


 
```c
//5个函数??? 
typedef struct{
    ElemType list[MaxSize];
    int size; 
}SequenceList;            //将struct 某某类型,自定义成 SequenceList
SequenceList L;           //SequenceList的变量名 
/*顺序表的初始化*/
void ListInitialize(SequenceList *L)               //一定要用指针参数,其会自动传回到主函数 
{
    L->size=0; 
}
 
int ListLength(SequenceList L)
{
    return L.size;
 } 
/*在顺序表L的位置i前插入数据元素x,插入成功则返回1,失败则返回0*/
int ListInsert(SequenceList *L,int i,ElemType x)
{
   int j;
   if(L->size>=MaxSize)
     {
         printf("顺序表已满无法插入!\n");
         return 0;
      }
   else if(i<0||i>L->size)
      {
          printf("参数i不合法:\n");
          return 0; 
          }
   else
      {
          /*for(j=L->size;j>i;j--)          //从最后开始往前后退 
             {
                  L->list[j]=L->list[j-1];   //其实,读到后面我们就能知道为什么要用指针了,这样方便传递,不用再用return了但是,这个不是在前面吗,我在想想 
             
             }     */                    //???? 
        L->list[i]=x;
        L->size++;//这个加加,和前面不能换位置 
        return 1; 
          }    
}
 
int ListGet(SequenceList L,int i,ElemType *x)        //注意:只是取值,不用动顺序表里面的东西,否则就像删除数据了 
{
    if(i<0||i>ListLength(L)-1)              //为什么不能用i>L.size-1 
      {
          printf("参数i不合法:\n");
            return 0; 
       }
    else 
       {
           *x=L.list[i];
           return 1;
       }
}
int ListFind(SequenceList L,char x)
{
    int i; 
    for(i=0;i<L.size;i++)
       {
           if(L.list[i].name==x)
              {
              return i;
              break;   //找到了就不要继续找下去,如果继续找下去是返回i还是-1 ??? 
              }
           else
             return -1;
       }
}
 

主函数代码:

 
//这是一个利用顺序表来实现的病人病历管理系统
#include<stdio.h>
#include<string.h>
#define MaxSize 101             //这个是宏定义
 
typedef struct
{
    char number[5];
    char name[20];
    char symptom[50];
 } patient;
typedef patient ElemType;                 //struct patient结构里面所有的变量类型定义为ElemType类型  
#include"SequenceList.h"          //如果这里空格会怎样 ??? 
int  main()
{
    int n;
    patient s;            //定义 结构体变量,难道不能用ElemType s;??? 所以这里是不可以的 
    SequenceList mylist;   //对应了那些函数的参数类型都是SequenceList
    int i,j;
    ListInitialize(&mylist);              //再看看函数传递??? 
    printf("病人数量:");
    scanf("%d",&n); 
    for(i=0;i<n;i++)
       {
           printf("请输入第%d个病人的信息:\n",i+1);
        scanf("%s%s%s",s.number,s.name,s.symptom);
         ListInsert( &mylist,i, s);          //s里的所有东西插入到顺序表中
       }
    printf("请输入需要查找病人的名字:\n");
    scanf("%s",s.name) ;
    j=ListFind(L,s.name);//存在的话返回的是和x相等的数据元素的序号 
    printf("查找的病人在顺序表是第几个:%d\n",j);
    ListGet(L,j,&s);
    printf("%s %s %s ",s.number,s.name,s.symptom);
       
return 0;     
}

测试结果:

img

img

奇怪的点:
1.返回的j值总是0,不是和代码那样,返回的是对应的哪个数
2.提取信息那里,不管j是否在范围内,总是会先打印“参数不合法”
3.取出来的信息只有名字是对的,无论是何种情况取出来的信息中,序号和症状总是顺序表最后一个信息里的序号和症状。
希望指出代码问题,非常感谢!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-02 02:02
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月1日

悬赏问题

  • ¥20 单细胞数据注释时报错
  • ¥20 dify工作流分析sql查询结果
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态
  • ¥15 二分图中俩集合中节点数与连边概率的关系
  • ¥20 wordpress如何限制ip访问频率
  • ¥15 自研小游戏,需要后台服务器存储用户数据关卡配置等数据