如图,这里先只写LEVEL1
所需知识:结构体、链表、动态分配
part1
声明结构体,包括题目中的信息
struct project{
char name[20]; //项目名
char head[10]; //负责人
char players[50]; //队员计数---统计单词数
char teacher[10]; //指导老师
int number; //队员人数
char category[20]; //项目类别
char id[7]; //编号
};
part2
声明结构体包含上述信息和一个结构体指针
struct Node{
struct project data;
struct Node* next;
};
part3
创建头节点
struct Node* createlist(){
struct Node* HeadNode=(struct Node*)malloc(sizeof(struct Node));
// HeadNode->data=NULL;
HeadNode->next=NULL;
return HeadNode;
}
//想问一下data怎么初始化??
这里其实也可以是创建一个节点
在main中创建头节点还应该加上
struct Node* list=creatNewNode();
part4
这里我为了程序框好看一点,用了<Windows.h> 这个库
其中改变了程序框的名称、背景与字体的颜色。
system("color 8B");
system("title *xx项目管理系统*");
part5
系统的导引
printf("----------欢迎使用xx项目管理系统!----------\n");
printf("----------第一次使用请您先上传数据!----------\n");
part6
第一次使用时需要先上传数据,充实链表
我们这里使用add函数(解析见注释)
//第一次使用添加数据
void add(struct Node* list){
struct project data; //data用于存储数据,然后一起赋给节点
char decide[100]={0}; //选择是否继续添加
while(1){
//名称、类别
printf("请分别输入添加的项目名称和项目类别(以空格分隔):\n");
scanf("%s %s",&data.name,&data.category);
getchar(); //这里的getchar()是用来接多余的回车的
//编号
printf("请输入项目编号(格式:字母+6个数字):\n");
gets(data.id);
//这里是有一个检查,如果链表中已经有了这个编号,直接退出现在的操作
struct Node* pos;
pos=list;
while(pos->next!=NULL){ //这里是链表的遍历
if(strcmp(data.id,po