#include <stdio.h>
#include <string.h>
#define MAX 100
/* ---------- Complaint structure ---------- */
typedef struct {
int id; // Unique ID (1..N)
char studentID[20]; // Student ID
char name[50]; // Name or "Anonymous"
char department[30]; // Department
char message[200]; // Complaint text
int resolved; // 0 = Pending, 1 = Resolved
char solution[200]; // Solution description
} Complaint;
Complaint complaints[MAX];
int count = 0;
/* ---------- Helper: trim trailing newline ---------- */
void trimNewline
(char *s
) { s
[strcspn(s
, "\n")] = '\0'; }
/* ---------- 1. Submit Complaint ---------- */
void addComplaint(void) {
if (count
>= MAX
) { puts("⚠️ Complaint list is full!"); return; } getchar(); // flush leftover newline
complaints[count].id = count + 1; // unique ID
fgets(complaints
[count
].
studentID, sizeof(complaints
[count
].
studentID), stdin
); trimNewline(complaints[count].studentID);
printf("Department (CSE/EEE/Admin): "); fgets(complaints
[count
].
department, sizeof(complaints
[count
].
department), stdin
); trimNewline(complaints[count].department);
char anon;
printf("Do you want to keep your name anonymous? (Y/N): "); scanf(" %c", &anon
); // space before %c skips whitespace
if (anon == 'Y' || anon == 'y') {
strcpy(complaints
[count
].
name, "Anonymous"); } else {
fgets(complaints
[count
].
name, sizeof(complaints
[count
].
name), stdin
); trimNewline(complaints[count].name);
}
printf("Complaint message : "); fgets(complaints
[count
].
message, sizeof(complaints
[count
].
message), stdin
); trimNewline(complaints[count].message);
complaints[count].resolved = 0;
complaints[count].solution[0] = '\0';
printf("✅ Complaint submitted with ID #%d\n", complaints
[count
].
id); count++;
}
/* ---------- 2. View All Complaints ---------- */
void viewAll(void) {
if (count
== 0) { puts("📭 No complaints yet."); return; }
puts("\n--- Pending Complaints ---"); for (int i = 0; i < count; i++) {
if (!complaints[i].resolved) {
printf("\nID : %d\n", complaints
[i
].
id);
if (strcmp(complaints
[i
].
name, "Anonymous") == 0) { printf("Student ID: Hidden\n"); } else {
printf("Student ID: %s\n", complaints
[i
].
studentID); printf("Name : %s\n", complaints
[i
].
name); }
printf("Dept : %s\n", complaints
[i
].
department); printf("Message : %s\n", complaints
[i
].
message); }
}
puts("\n--- Resolved Complaints ---"); for (int i = 0; i < count; i++) {
if (complaints[i].resolved) {
printf("\nID : %d\n", complaints
[i
].
id);
if (strcmp(complaints
[i
].
name, "Anonymous") == 0) { printf("Student ID: Hidden\n"); } else {
printf("Student ID: %s\n", complaints
[i
].
studentID); printf("Name : %s\n", complaints
[i
].
name); }
printf("Dept : %s\n", complaints
[i
].
department); printf("Message : %s\n", complaints
[i
].
message); complaints[i].solution[0] ? complaints[i].solution : "(no details)");
}
}
}
/* ---------- 3. Solve Complaint ---------- */
void solveComplaint(void) {
if (count
== 0) { puts("No complaints to solve."); return; }
int id;
printf("Enter complaint ID to mark solved: "); if (scanf("%d", &id
) != 1) { puts("Invalid input."); return; }
if (id
< 1 || id
> count
) { puts("❌ Invalid ID."); return; } if (complaints
[id
- 1].
resolved) { puts("Already resolved."); return; }
printf("Enter solution description (optional): "); fgets(complaints
[id
- 1].
solution, sizeof(complaints[id - 1].solution), stdin);
trimNewline(complaints[id - 1].solution);
complaints[id - 1].resolved = 1;
puts("✅ Complaint marked as solved."); }
/* ---------- 4. Notice Board (identity always hidden) ---------- */
void noticeBoard(void) {
if (count
== 0) { puts("📭 No complaints yet."); return; }
puts("\n==== NOTICE BOARD ====");
int anyPending = 0, anyResolved = 0;
/* Pending first */
for (int i = 0; i < count; i++) {
if (!complaints[i].resolved) {
if (!anyPending
) puts("\n-- Pending --"); anyPending = 1;
complaints[i].id,
complaints[i].department,
complaints[i].message);
}
}
if (!anyPending
) puts("\nNo pending complaints ✅");
/* Resolved after */
for (int i = 0; i < count; i++) {
if (complaints[i].resolved) {
if (!anyResolved
) puts("\n-- Resolved --"); anyResolved = 1;
complaints[i].id,
complaints[i].department,
complaints[i].message);
}
}
}
/* ---------- Main Menu ---------- */
int main(void) {
int choice;
while (1) {
puts("\n===== Complaint Routing System ====="); puts("1. Submit Complaint"); puts("2. View All Complaints"); puts("3. Solve Complaint"); if (scanf("%d", &choice
) != 1) break;
switch (choice) {
case 1: addComplaint(); break;
case 2: viewAll(); break;
case 3: solveComplaint(); break;
case 4: noticeBoard(); break;
case 5: puts("Goodbye!"); return 0; default: puts("Invalid choice!"); }
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYIDEwMAoKLyogLS0tLS0tLS0tLSBDb21wbGFpbnQgc3RydWN0dXJlIC0tLS0tLS0tLS0gKi8KdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50ICBpZDsgICAgICAgICAgICAgICAgIC8vIFVuaXF1ZSBJRCAoMS4uTikKICAgIGNoYXIgc3R1ZGVudElEWzIwXTsgICAgICAvLyBTdHVkZW50IElECiAgICBjaGFyIG5hbWVbNTBdOyAgICAgICAgICAgLy8gTmFtZSBvciAiQW5vbnltb3VzIgogICAgY2hhciBkZXBhcnRtZW50WzMwXTsgICAgIC8vIERlcGFydG1lbnQKICAgIGNoYXIgbWVzc2FnZVsyMDBdOyAgICAgICAvLyBDb21wbGFpbnQgdGV4dAogICAgaW50ICByZXNvbHZlZDsgICAgICAgICAgIC8vIDAgPSBQZW5kaW5nLCAxID0gUmVzb2x2ZWQKICAgIGNoYXIgc29sdXRpb25bMjAwXTsgICAgICAvLyBTb2x1dGlvbiBkZXNjcmlwdGlvbgp9IENvbXBsYWludDsKCkNvbXBsYWludCBjb21wbGFpbnRzW01BWF07CmludCBjb3VudCA9IDA7CgovKiAtLS0tLS0tLS0tIEhlbHBlcjogdHJpbSB0cmFpbGluZyBuZXdsaW5lIC0tLS0tLS0tLS0gKi8Kdm9pZCB0cmltTmV3bGluZShjaGFyICpzKSB7IHNbc3RyY3NwbihzLCAiXG4iKV0gPSAnXDAnOyB9CgovKiAtLS0tLS0tLS0tIDEuIFN1Ym1pdCBDb21wbGFpbnQgLS0tLS0tLS0tLSAqLwp2b2lkIGFkZENvbXBsYWludCh2b2lkKSB7CiAgICBpZiAoY291bnQgPj0gTUFYKSB7IHB1dHMoIuKaoO+4jyAgQ29tcGxhaW50IGxpc3QgaXMgZnVsbCEiKTsgcmV0dXJuOyB9CiAgICBnZXRjaGFyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbHVzaCBsZWZ0b3ZlciBuZXdsaW5lCgogICAgY29tcGxhaW50c1tjb3VudF0uaWQgPSBjb3VudCArIDE7ICAgICAgLy8gdW5pcXVlIElECgogICAgcHJpbnRmKCJTdHVkZW50IElEICAgICAgICAgIDogIik7CiAgICBmZ2V0cyhjb21wbGFpbnRzW2NvdW50XS5zdHVkZW50SUQsIHNpemVvZihjb21wbGFpbnRzW2NvdW50XS5zdHVkZW50SUQpLCBzdGRpbik7CiAgICB0cmltTmV3bGluZShjb21wbGFpbnRzW2NvdW50XS5zdHVkZW50SUQpOwoKICAgIHByaW50ZigiRGVwYXJ0bWVudCAoQ1NFL0VFRS9BZG1pbik6ICIpOwogICAgZmdldHMoY29tcGxhaW50c1tjb3VudF0uZGVwYXJ0bWVudCwgc2l6ZW9mKGNvbXBsYWludHNbY291bnRdLmRlcGFydG1lbnQpLCBzdGRpbik7CiAgICB0cmltTmV3bGluZShjb21wbGFpbnRzW2NvdW50XS5kZXBhcnRtZW50KTsKCiAgICBjaGFyIGFub247CiAgICBwcmludGYoIkRvIHlvdSB3YW50IHRvIGtlZXAgeW91ciBuYW1lIGFub255bW91cz8gKFkvTik6ICIpOwogICAgc2NhbmYoIiAlYyIsICZhbm9uKTsgICAgICAgICAgICAgICAgICAgLy8gc3BhY2UgYmVmb3JlICVjIHNraXBzIHdoaXRlc3BhY2UKICAgIGdldGNoYXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN1bWUgbmV3bGluZQoKICAgIGlmIChhbm9uID09ICdZJyB8fCBhbm9uID09ICd5JykgewogICAgICAgIHN0cmNweShjb21wbGFpbnRzW2NvdW50XS5uYW1lLCAiQW5vbnltb3VzIik7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiWW91ciBOYW1lICAgICAgICAgIDogIik7CiAgICAgICAgZmdldHMoY29tcGxhaW50c1tjb3VudF0ubmFtZSwgc2l6ZW9mKGNvbXBsYWludHNbY291bnRdLm5hbWUpLCBzdGRpbik7CiAgICAgICAgdHJpbU5ld2xpbmUoY29tcGxhaW50c1tjb3VudF0ubmFtZSk7CiAgICB9CgogICAgcHJpbnRmKCJDb21wbGFpbnQgbWVzc2FnZSAgIDogIik7CiAgICBmZ2V0cyhjb21wbGFpbnRzW2NvdW50XS5tZXNzYWdlLCBzaXplb2YoY29tcGxhaW50c1tjb3VudF0ubWVzc2FnZSksIHN0ZGluKTsKICAgIHRyaW1OZXdsaW5lKGNvbXBsYWludHNbY291bnRdLm1lc3NhZ2UpOwoKICAgIGNvbXBsYWludHNbY291bnRdLnJlc29sdmVkID0gMDsKICAgIGNvbXBsYWludHNbY291bnRdLnNvbHV0aW9uWzBdID0gJ1wwJzsKCiAgICBwcmludGYoIuKchSBDb21wbGFpbnQgc3VibWl0dGVkIHdpdGggSUQgIyVkXG4iLCBjb21wbGFpbnRzW2NvdW50XS5pZCk7CiAgICBjb3VudCsrOwp9CgovKiAtLS0tLS0tLS0tIDIuIFZpZXcgQWxsIENvbXBsYWludHMgLS0tLS0tLS0tLSAqLwp2b2lkIHZpZXdBbGwodm9pZCkgewogICAgaWYgKGNvdW50ID09IDApIHsgcHV0cygi8J+TrSBObyBjb21wbGFpbnRzIHlldC4iKTsgcmV0dXJuOyB9CgogICAgcHV0cygiXG4tLS0gUGVuZGluZyBDb21wbGFpbnRzIC0tLSIpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgaWYgKCFjb21wbGFpbnRzW2ldLnJlc29sdmVkKSB7CiAgICAgICAgICAgIHByaW50ZigiXG5JRCAgICAgICAgOiAlZFxuIiwgY29tcGxhaW50c1tpXS5pZCk7CgogICAgICAgICAgICBpZiAoc3RyY21wKGNvbXBsYWludHNbaV0ubmFtZSwgIkFub255bW91cyIpID09IDApIHsKICAgICAgICAgICAgICAgIHByaW50ZigiU3R1ZGVudCBJRDogSGlkZGVuXG4iKTsKICAgICAgICAgICAgICAgIHByaW50ZigiTmFtZSAgICAgIDogQW5vbnltb3VzXG4iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHByaW50ZigiU3R1ZGVudCBJRDogJXNcbiIsIGNvbXBsYWludHNbaV0uc3R1ZGVudElEKTsKICAgICAgICAgICAgICAgIHByaW50ZigiTmFtZSAgICAgIDogJXNcbiIsIGNvbXBsYWludHNbaV0ubmFtZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaW50ZigiRGVwdCAgICAgIDogJXNcbiIsIGNvbXBsYWludHNbaV0uZGVwYXJ0bWVudCk7CiAgICAgICAgICAgIHByaW50ZigiTWVzc2FnZSAgIDogJXNcbiIsIGNvbXBsYWludHNbaV0ubWVzc2FnZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1dHMoIlxuLS0tIFJlc29sdmVkIENvbXBsYWludHMgLS0tIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICBpZiAoY29tcGxhaW50c1tpXS5yZXNvbHZlZCkgewogICAgICAgICAgICBwcmludGYoIlxuSUQgICAgICAgIDogJWRcbiIsIGNvbXBsYWludHNbaV0uaWQpOwoKICAgICAgICAgICAgaWYgKHN0cmNtcChjb21wbGFpbnRzW2ldLm5hbWUsICJBbm9ueW1vdXMiKSA9PSAwKSB7CiAgICAgICAgICAgICAgICBwcmludGYoIlN0dWRlbnQgSUQ6IEhpZGRlblxuIik7CiAgICAgICAgICAgICAgICBwcmludGYoIk5hbWUgICAgICA6IEFub255bW91c1xuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBwcmludGYoIlN0dWRlbnQgSUQ6ICVzXG4iLCBjb21wbGFpbnRzW2ldLnN0dWRlbnRJRCk7CiAgICAgICAgICAgICAgICBwcmludGYoIk5hbWUgICAgICA6ICVzXG4iLCBjb21wbGFpbnRzW2ldLm5hbWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcmludGYoIkRlcHQgICAgICA6ICVzXG4iLCBjb21wbGFpbnRzW2ldLmRlcGFydG1lbnQpOwogICAgICAgICAgICBwcmludGYoIk1lc3NhZ2UgICA6ICVzXG4iLCBjb21wbGFpbnRzW2ldLm1lc3NhZ2UpOwogICAgICAgICAgICBwcmludGYoIlNvbHV0aW9uICA6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgY29tcGxhaW50c1tpXS5zb2x1dGlvblswXSA/IGNvbXBsYWludHNbaV0uc29sdXRpb24gOiAiKG5vIGRldGFpbHMpIik7CiAgICAgICAgfQogICAgfQp9CgovKiAtLS0tLS0tLS0tIDMuIFNvbHZlIENvbXBsYWludCAtLS0tLS0tLS0tICovCnZvaWQgc29sdmVDb21wbGFpbnQodm9pZCkgewogICAgaWYgKGNvdW50ID09IDApIHsgcHV0cygiTm8gY29tcGxhaW50cyB0byBzb2x2ZS4iKTsgcmV0dXJuOyB9CgogICAgaW50IGlkOwogICAgcHJpbnRmKCJFbnRlciBjb21wbGFpbnQgSUQgdG8gbWFyayBzb2x2ZWQ6ICIpOwogICAgaWYgKHNjYW5mKCIlZCIsICZpZCkgIT0gMSkgeyBwdXRzKCJJbnZhbGlkIGlucHV0LiIpOyByZXR1cm47IH0KICAgIGdldGNoYXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsdXNoIG5ld2xpbmUKCiAgICBpZiAoaWQgPCAxIHx8IGlkID4gY291bnQpIHsgcHV0cygi4p2MIEludmFsaWQgSUQuIik7IHJldHVybjsgfQogICAgaWYgKGNvbXBsYWludHNbaWQgLSAxXS5yZXNvbHZlZCkgeyBwdXRzKCJBbHJlYWR5IHJlc29sdmVkLiIpOyByZXR1cm47IH0KCiAgICBwcmludGYoIkVudGVyIHNvbHV0aW9uIGRlc2NyaXB0aW9uIChvcHRpb25hbCk6ICIpOwogICAgZmdldHMoY29tcGxhaW50c1tpZCAtIDFdLnNvbHV0aW9uLAogICAgICAgICAgc2l6ZW9mKGNvbXBsYWludHNbaWQgLSAxXS5zb2x1dGlvbiksIHN0ZGluKTsKICAgIHRyaW1OZXdsaW5lKGNvbXBsYWludHNbaWQgLSAxXS5zb2x1dGlvbik7CgogICAgY29tcGxhaW50c1tpZCAtIDFdLnJlc29sdmVkID0gMTsKICAgIHB1dHMoIuKchSBDb21wbGFpbnQgbWFya2VkIGFzIHNvbHZlZC4iKTsKfQoKLyogLS0tLS0tLS0tLSA0LiBOb3RpY2UgQm9hcmQgKGlkZW50aXR5IGFsd2F5cyBoaWRkZW4pIC0tLS0tLS0tLS0gKi8Kdm9pZCBub3RpY2VCb2FyZCh2b2lkKSB7CiAgICBpZiAoY291bnQgPT0gMCkgeyBwdXRzKCLwn5OtIE5vIGNvbXBsYWludHMgeWV0LiIpOyByZXR1cm47IH0KCiAgICBwdXRzKCJcbj09PT0gTk9USUNFIEJPQVJEID09PT0iKTsKCiAgICBpbnQgYW55UGVuZGluZyA9IDAsIGFueVJlc29sdmVkID0gMDsKCiAgICAvKiBQZW5kaW5nIGZpcnN0ICovCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICBpZiAoIWNvbXBsYWludHNbaV0ucmVzb2x2ZWQpIHsKICAgICAgICAgICAgaWYgKCFhbnlQZW5kaW5nKSBwdXRzKCJcbi0tIFBlbmRpbmcgLS0iKTsKICAgICAgICAgICAgYW55UGVuZGluZyA9IDE7CiAgICAgICAgICAgIHByaW50ZigiIyVkIHwgJXMgfCAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGNvbXBsYWludHNbaV0uaWQsCiAgICAgICAgICAgICAgICAgICBjb21wbGFpbnRzW2ldLmRlcGFydG1lbnQsCiAgICAgICAgICAgICAgICAgICBjb21wbGFpbnRzW2ldLm1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KICAgIGlmICghYW55UGVuZGluZykgcHV0cygiXG5ObyBwZW5kaW5nIGNvbXBsYWludHMg4pyFIik7CgogICAgLyogUmVzb2x2ZWQgYWZ0ZXIgKi8KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgIGlmIChjb21wbGFpbnRzW2ldLnJlc29sdmVkKSB7CiAgICAgICAgICAgIGlmICghYW55UmVzb2x2ZWQpIHB1dHMoIlxuLS0gUmVzb2x2ZWQgLS0iKTsKICAgICAgICAgICAgYW55UmVzb2x2ZWQgPSAxOwogICAgICAgICAgICBwcmludGYoIiMlZCB8ICVzIHwgJXNcbiIsCiAgICAgICAgICAgICAgICAgICBjb21wbGFpbnRzW2ldLmlkLAogICAgICAgICAgICAgICAgICAgY29tcGxhaW50c1tpXS5kZXBhcnRtZW50LAogICAgICAgICAgICAgICAgICAgY29tcGxhaW50c1tpXS5tZXNzYWdlKTsKICAgICAgICB9CiAgICB9Cn0KCi8qIC0tLS0tLS0tLS0gTWFpbiBNZW51IC0tLS0tLS0tLS0gKi8KaW50IG1haW4odm9pZCkgewogICAgaW50IGNob2ljZTsKICAgIHdoaWxlICgxKSB7CiAgICAgICAgcHV0cygiXG49PT09PSBDb21wbGFpbnQgUm91dGluZyBTeXN0ZW0gPT09PT0iKTsKICAgICAgICBwdXRzKCIxLiBTdWJtaXQgQ29tcGxhaW50Iik7CiAgICAgICAgcHV0cygiMi4gVmlldyBBbGwgQ29tcGxhaW50cyIpOwogICAgICAgIHB1dHMoIjMuIFNvbHZlIENvbXBsYWludCIpOwogICAgICAgIHB1dHMoIjQuIE5vdGljZSBCb2FyZCIpOwogICAgICAgIHB1dHMoIjUuIEV4aXQiKTsKICAgICAgICBwcmludGYoIkVudGVyIGNob2ljZTogIik7CiAgICAgICAgaWYgKHNjYW5mKCIlZCIsICZjaG9pY2UpICE9IDEpIGJyZWFrOwoKICAgICAgICBzd2l0Y2ggKGNob2ljZSkgewogICAgICAgICAgICBjYXNlIDE6IGFkZENvbXBsYWludCgpOyAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDI6IHZpZXdBbGwoKTsgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6IHNvbHZlQ29tcGxhaW50KCk7IGJyZWFrOwogICAgICAgICAgICBjYXNlIDQ6IG5vdGljZUJvYXJkKCk7ICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDU6IHB1dHMoIkdvb2RieWUhIik7IHJldHVybiAwOwogICAgICAgICAgICBkZWZhdWx0OiBwdXRzKCJJbnZhbGlkIGNob2ljZSEiKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQo=