【发布时间】:2015-04-15 05:28:35
【问题描述】:
我不确定如何执行以下操作...
修改insertion()函数,将新人插入到按人名排序的目录中。
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#pragma warning(disable: 4996)
#define max 100
typedef enum { diploma, bachelor, master, doctor } education;
const char* getDegreeName(enum education degree){
switch (degree){
case diploma: return "diploma";
break;
case bachelor: return "bachelor";
break;
case master: return "master";
break;
case doctor: return"doctor";
break;
}
}
struct person { // a node to hold personal details
char name[30];
char email[30];
int phone;
education degree;
};
struct person directory[max]; // an array of structures, 100 entries
int tail = 0; // global variable
int i = 0;
int z = 0;
char temp[30];
void flush(); // forward declaration of functions
void branching(char c);
int insertion();
int print_person(int i);
int print_all();
int search_person();
int delete_person();
int main() { // print a menu for selection
char ch = 'i';
ungetc('\n', stdin); // inject the newline character into input buffer
do {
printf("Enter your selection\n");
printf("\ti: insert a new entry\n");
printf("\td: delete an entry\n");
printf("\ts: search an entry\n");
printf("\tp: print all entries\n");
printf("\tq: quit \n");
flush(); // flush the input buffer. To be discussed later
ch = tolower(getchar());
branching(ch);
} while (ch != 113);
return 0;
}
void flush() { // flush the input buffer. To be discussed later
int c;
do {
c = getchar();
} while (c != '\n' && c != EOF);
}
void branching(char c) { // branch to different tasks
switch (c) {
case 'i':
insertion();
break;
case 's':
search_person();
break;
case 'd':
delete_person();
break;
case 'p':
print_all();
break;
case 'q':
break;
default:
printf("Invalid input\n");
}
}
int insertion() { // insert a new entry at the end
if (tail == max) {
printf("There are no more places to insert.\n");
return -1;
}
else {
printf("Enter name, phone, email:\n");
printf("Enter 0 for diploma, 1 for bachlor, 2 for master and 3 for doctor\n");
scanf("%s", directory[tail].name);
scanf("%d", &directory[tail].phone, sizeof(directory[tail].phone));
scanf("%s", directory[tail].email);
scanf("%d", &directory[tail].degree); //sacaning the degree
tail++;
printf("The number of entries = %d\n", tail);
return 0;
}
}
int print_person(int i) {
// print all information one person in the directory
printf("\n\nname = %s\n", directory[i].name);
printf("email = %s\n", directory[i].email);
printf("phone = %d\n", directory[i].phone);
printf("degree = %s\n", getDegreeName(directory[i].degree));
return 0;
}
int print_all() {
// print all information each person in the contactbook
int i;
if (tail == 0) {
printf("No entries found.");
}
else {
for (i = 0; i < tail; i++) {
print_person(i);
}
}
return 0;
}
int search_person() { // print phone and email via name
char sname[30]; int i;
printf("Please enter the name to be searched for:\n");
scanf("%s", sname); //sname is an array, no & needed
for (i = 0; i<tail; i++)
if (strcmp(sname, directory[i].name) == 0) {
print_person(i);
return i;
}
printf("The name does not exist.\n");
return -1;
}
int delete_person() {
int i, k;
k = search_person();
if (k == -1) {
printf("The name does not exist.\n"); return -1;
}
else {
for (i = k; i<tail; i++) {
strcpy(directory[i].name, directory[i + 1].name);
directory[i].phone = directory[i + 1].phone;
strcpy(directory[i].email, directory[i + 1].email);
printf("The index deleted is: %d\n", k);
}
tail--;
return k;
}
}
【问题讨论】:
-
请添加您尝试过的内容?说“不知道该怎么做”将无助于添加您迄今为止尝试过的内容以及您发布的代码是您编写的吗?
-
这是作业吗?我在想,因为我今天早些时候看到了同样的问题。
标签: c++ c arrays sorting enums