#include <stdio.h>
#include <string.h>
#define MAX 100
typedef struct {
int id; /* unique ID */
char studentID[20]; /* student ID (hidden if anonymous) */
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 text */
} Complaint;
Complaint complaints[MAX];
int count = 0;
void trimNewline
(char *s
) { s
[strcspn(s
, "\n")] = '\0'; }
/* ---------- 1. Submit complaint ---------- */
void addComplaint(void)
{
if (count
>= MAX
) { puts("⚠️ List full."); return; } getchar(); /* flush newline from menu input */
complaints[count].id = count + 1;
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): ");
/* ──► FLIPPED LOGIC ◄── */
if (anon == 'N' || anon == 'n') { /* treat as anonymous */
strcpy(complaints
[count
].
name, "Anonymous"); /* keep studentID in memory, but hide later */
} else { /* Y/y → show name */
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
){ 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){ puts("Student ID: Hidden"); puts("Name : Anonymous"); }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){ puts("Student ID: Hidden"); puts("Name : Anonymous"); }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
){ 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 hidden) ---------- */
void noticeBoard(void)
{
if(!count
){ puts("📭 No complaints yet."); return; }
puts("\n==== NOTICE BOARD ===="); int shownPending=0,shownResolved=0;
for(int i=0;i<count;i++){
if(!complaints[i].resolved){
if(!shownPending
){ puts("\n-- Pending --"); shownPending
=1; } complaints[i].id,complaints[i].department,complaints[i].message);
}
}
if(!shownPending
) puts("\nNo pending complaints ✅");
for(int i=0;i<count;i++){
if(complaints[i].resolved){
if(!shownResolved
){ puts("\n-- Resolved --"); shownResolved
=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+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCiNkZWZpbmUgTUFYIDEwMAoKdHlwZWRlZiBzdHJ1Y3QgewogICAgaW50ICBpZDsgICAgICAgICAgICAgICAgIC8qIHVuaXF1ZSBJRCAqLwogICAgY2hhciBzdHVkZW50SURbMjBdOyAgICAgIC8qIHN0dWRlbnQgSUQgKGhpZGRlbiBpZiBhbm9ueW1vdXMpICovCiAgICBjaGFyIG5hbWVbNTBdOyAgICAgICAgICAgLyogbmFtZSBvciAiQW5vbnltb3VzIiAqLwogICAgY2hhciBkZXBhcnRtZW50WzMwXTsgICAgIC8qIGRlcGFydG1lbnQgKi8KICAgIGNoYXIgbWVzc2FnZVsyMDBdOyAgICAgICAvKiBjb21wbGFpbnQgdGV4dCAqLwogICAgaW50ICByZXNvbHZlZDsgICAgICAgICAgIC8qIDAgPSBwZW5kaW5nLCAxID0gcmVzb2x2ZWQgKi8KICAgIGNoYXIgc29sdXRpb25bMjAwXTsgICAgICAvKiBzb2x1dGlvbiB0ZXh0ICovCn0gQ29tcGxhaW50OwoKQ29tcGxhaW50IGNvbXBsYWludHNbTUFYXTsKaW50IGNvdW50ID0gMDsKCnZvaWQgdHJpbU5ld2xpbmUoY2hhciAqcykgeyBzW3N0cmNzcG4ocywgIlxuIildID0gJ1wwJzsgfQoKLyogLS0tLS0tLS0tLSAxLiBTdWJtaXQgY29tcGxhaW50IC0tLS0tLS0tLS0gKi8Kdm9pZCBhZGRDb21wbGFpbnQodm9pZCkKewogICAgaWYgKGNvdW50ID49IE1BWCkgeyBwdXRzKCLimqDvuI8gIExpc3QgZnVsbC4iKTsgcmV0dXJuOyB9CiAgICBnZXRjaGFyKCk7ICAgICAgICAgICAgICAgICAgICAgLyogZmx1c2ggbmV3bGluZSBmcm9tIG1lbnUgaW5wdXQgKi8KCiAgICBjb21wbGFpbnRzW2NvdW50XS5pZCA9IGNvdW50ICsgMTsKCiAgICBwcmludGYoIlN0dWRlbnQgSUQgICAgICAgICAgOiAiKTsKICAgIGZnZXRzKGNvbXBsYWludHNbY291bnRdLnN0dWRlbnRJRCxzaXplb2YoY29tcGxhaW50c1tjb3VudF0uc3R1ZGVudElEKSxzdGRpbik7CiAgICB0cmltTmV3bGluZShjb21wbGFpbnRzW2NvdW50XS5zdHVkZW50SUQpOwoKICAgIHByaW50ZigiRGVwYXJ0bWVudCAoQ1NFL0VFRS9BZG1pbik6ICIpOwogICAgZmdldHMoY29tcGxhaW50c1tjb3VudF0uZGVwYXJ0bWVudCxzaXplb2YoY29tcGxhaW50c1tjb3VudF0uZGVwYXJ0bWVudCksc3RkaW4pOwogICAgdHJpbU5ld2xpbmUoY29tcGxhaW50c1tjb3VudF0uZGVwYXJ0bWVudCk7CgogICAgY2hhciBhbm9uOwogICAgcHJpbnRmKCJEbyB5b3Ugd2FudCB0byBrZWVwIHlvdXIgbmFtZSBhbm9ueW1vdXM/IChZL04pOiAiKTsKICAgIHNjYW5mKCIgJWMiLCZhbm9uKTsKICAgIGdldGNoYXIoKTsgICAgICAgICAgICAgICAgICAgIC8qIGZsdXNoIG5ld2xpbmUgKi8KCiAgICAvKiAg4pSA4pSA4pa6ICBGTElQUEVEIExPR0lDICDil4TilIDilIAgICovCiAgICBpZiAoYW5vbiA9PSAnTicgfHwgYW5vbiA9PSAnbicpIHsgICAgICAgICAgLyogdHJlYXQgYXMgYW5vbnltb3VzICovCiAgICAgICAgc3RyY3B5KGNvbXBsYWludHNbY291bnRdLm5hbWUsICJBbm9ueW1vdXMiKTsKICAgICAgICAvKiBrZWVwIHN0dWRlbnRJRCBpbiBtZW1vcnksIGJ1dCBoaWRlIGxhdGVyICovCiAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWS95IOKGkiBzaG93IG5hbWUgKi8KICAgICAgICBwcmludGYoIllvdXIgTmFtZSAgICAgICAgICA6ICIpOwogICAgICAgIGZnZXRzKGNvbXBsYWludHNbY291bnRdLm5hbWUsc2l6ZW9mKGNvbXBsYWludHNbY291bnRdLm5hbWUpLHN0ZGluKTsKICAgICAgICB0cmltTmV3bGluZShjb21wbGFpbnRzW2NvdW50XS5uYW1lKTsKICAgIH0KCiAgICBwcmludGYoIkNvbXBsYWludCBtZXNzYWdlICAgOiAiKTsKICAgIGZnZXRzKGNvbXBsYWludHNbY291bnRdLm1lc3NhZ2Usc2l6ZW9mKGNvbXBsYWludHNbY291bnRdLm1lc3NhZ2UpLHN0ZGluKTsKICAgIHRyaW1OZXdsaW5lKGNvbXBsYWludHNbY291bnRdLm1lc3NhZ2UpOwoKICAgIGNvbXBsYWludHNbY291bnRdLnJlc29sdmVkICAgPSAwOwogICAgY29tcGxhaW50c1tjb3VudF0uc29sdXRpb25bMF09ICdcMCc7CgogICAgcHJpbnRmKCLinIUgQ29tcGxhaW50IHN1Ym1pdHRlZCB3aXRoIElEICMlZFxuIixjb21wbGFpbnRzW2NvdW50XS5pZCk7CiAgICBjb3VudCsrOwp9CgovKiAtLS0tLS0tLS0tIDIuIFZpZXcgYWxsIGNvbXBsYWludHMgLS0tLS0tLS0tLSAqLwp2b2lkIHZpZXdBbGwodm9pZCkKewogICAgaWYgKCFjb3VudCl7IHB1dHMoIvCfk60gTm8gY29tcGxhaW50cyB5ZXQuIik7IHJldHVybjsgfQoKICAgIHB1dHMoIlxuLS0tIFBlbmRpbmcgQ29tcGxhaW50cyAtLS0iKTsKICAgIGZvcihpbnQgaT0wO2k8Y291bnQ7aSsrKQogICAgewogICAgICAgIGlmKCFjb21wbGFpbnRzW2ldLnJlc29sdmVkKXsKICAgICAgICAgICAgcHJpbnRmKCJcbklEICAgICAgICA6ICVkXG4iLGNvbXBsYWludHNbaV0uaWQpOwogICAgICAgICAgICBpZihzdHJjbXAoY29tcGxhaW50c1tpXS5uYW1lLCJBbm9ueW1vdXMiKT09MCl7CiAgICAgICAgICAgICAgICBwdXRzKCJTdHVkZW50IElEOiBIaWRkZW4iKTsKICAgICAgICAgICAgICAgIHB1dHMoIk5hbWUgICAgICA6IEFub255bW91cyIpOwogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIHByaW50ZigiU3R1ZGVudCBJRDogJXNcbiIsY29tcGxhaW50c1tpXS5zdHVkZW50SUQpOwogICAgICAgICAgICAgICAgcHJpbnRmKCJOYW1lICAgICAgOiAlc1xuIixjb21wbGFpbnRzW2ldLm5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByaW50ZigiRGVwdCAgICAgIDogJXNcbiIsY29tcGxhaW50c1tpXS5kZXBhcnRtZW50KTsKICAgICAgICAgICAgcHJpbnRmKCJNZXNzYWdlICAgOiAlc1xuIixjb21wbGFpbnRzW2ldLm1lc3NhZ2UpOwogICAgICAgIH0KICAgIH0KCiAgICBwdXRzKCJcbi0tLSBSZXNvbHZlZCBDb21wbGFpbnRzIC0tLSIpOwogICAgZm9yKGludCBpPTA7aTxjb3VudDtpKyspCiAgICB7CiAgICAgICAgaWYoY29tcGxhaW50c1tpXS5yZXNvbHZlZCl7CiAgICAgICAgICAgIHByaW50ZigiXG5JRCAgICAgICAgOiAlZFxuIixjb21wbGFpbnRzW2ldLmlkKTsKICAgICAgICAgICAgaWYoc3RyY21wKGNvbXBsYWludHNbaV0ubmFtZSwiQW5vbnltb3VzIik9PTApewogICAgICAgICAgICAgICAgcHV0cygiU3R1ZGVudCBJRDogSGlkZGVuIik7CiAgICAgICAgICAgICAgICBwdXRzKCJOYW1lICAgICAgOiBBbm9ueW1vdXMiKTsKICAgICAgICAgICAgfWVsc2V7CiAgICAgICAgICAgICAgICBwcmludGYoIlN0dWRlbnQgSUQ6ICVzXG4iLGNvbXBsYWludHNbaV0uc3R1ZGVudElEKTsKICAgICAgICAgICAgICAgIHByaW50ZigiTmFtZSAgICAgIDogJXNcbiIsY29tcGxhaW50c1tpXS5uYW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBwcmludGYoIkRlcHQgICAgICA6ICVzXG4iLGNvbXBsYWludHNbaV0uZGVwYXJ0bWVudCk7CiAgICAgICAgICAgIHByaW50ZigiTWVzc2FnZSAgIDogJXNcbiIsY29tcGxhaW50c1tpXS5tZXNzYWdlKTsKICAgICAgICAgICAgcHJpbnRmKCJTb2x1dGlvbiAgOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGNvbXBsYWludHNbaV0uc29sdXRpb25bMF0/Y29tcGxhaW50c1tpXS5zb2x1dGlvbjoiKG5vIGRldGFpbHMpIik7CiAgICAgICAgfQogICAgfQp9CgovKiAtLS0tLS0tLS0tIDMuIFNvbHZlIGNvbXBsYWludCAtLS0tLS0tLS0tICovCnZvaWQgc29sdmVDb21wbGFpbnQodm9pZCkKewogICAgaWYoIWNvdW50KXsgcHV0cygiTm8gY29tcGxhaW50cyB0byBzb2x2ZS4iKTsgcmV0dXJuOyB9CgogICAgaW50IGlkOwogICAgcHJpbnRmKCJFbnRlciBjb21wbGFpbnQgSUQgdG8gbWFyayBzb2x2ZWQ6ICIpOwogICAgaWYoc2NhbmYoIiVkIiwmaWQpIT0xKXsgcHV0cygiSW52YWxpZCBpbnB1dC4iKTsgcmV0dXJuOyB9CiAgICBnZXRjaGFyKCk7CgogICAgaWYoaWQ8MXx8aWQ+Y291bnQpeyBwdXRzKCLinYwgSW52YWxpZCBJRC4iKTsgcmV0dXJuOyB9CiAgICBpZihjb21wbGFpbnRzW2lkLTFdLnJlc29sdmVkKXsgcHV0cygiQWxyZWFkeSByZXNvbHZlZC4iKTsgcmV0dXJuOyB9CgogICAgcHJpbnRmKCJFbnRlciBzb2x1dGlvbiBkZXNjcmlwdGlvbiAob3B0aW9uYWwpOiAiKTsKICAgIGZnZXRzKGNvbXBsYWludHNbaWQtMV0uc29sdXRpb24sc2l6ZW9mKGNvbXBsYWludHNbaWQtMV0uc29sdXRpb24pLHN0ZGluKTsKICAgIHRyaW1OZXdsaW5lKGNvbXBsYWludHNbaWQtMV0uc29sdXRpb24pOwoKICAgIGNvbXBsYWludHNbaWQtMV0ucmVzb2x2ZWQ9MTsKICAgIHB1dHMoIuKchSBDb21wbGFpbnQgbWFya2VkIGFzIHNvbHZlZC4iKTsKfQoKLyogLS0tLS0tLS0tLSA0LiBOb3RpY2UgYm9hcmQgKGlkZW50aXR5IGhpZGRlbikgLS0tLS0tLS0tLSAqLwp2b2lkIG5vdGljZUJvYXJkKHZvaWQpCnsKICAgIGlmKCFjb3VudCl7IHB1dHMoIvCfk60gTm8gY29tcGxhaW50cyB5ZXQuIik7IHJldHVybjsgfQoKICAgIHB1dHMoIlxuPT09PSBOT1RJQ0UgQk9BUkQgPT09PSIpOwogICAgaW50IHNob3duUGVuZGluZz0wLHNob3duUmVzb2x2ZWQ9MDsKCiAgICBmb3IoaW50IGk9MDtpPGNvdW50O2krKyl7CiAgICAgICAgaWYoIWNvbXBsYWludHNbaV0ucmVzb2x2ZWQpewogICAgICAgICAgICBpZighc2hvd25QZW5kaW5nKXsgcHV0cygiXG4tLSBQZW5kaW5nIC0tIik7IHNob3duUGVuZGluZz0xOyB9CiAgICAgICAgICAgIHByaW50ZigiIyVkIHwgJXMgfCAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGNvbXBsYWludHNbaV0uaWQsY29tcGxhaW50c1tpXS5kZXBhcnRtZW50LGNvbXBsYWludHNbaV0ubWVzc2FnZSk7CiAgICAgICAgfQogICAgfQogICAgaWYoIXNob3duUGVuZGluZykgcHV0cygiXG5ObyBwZW5kaW5nIGNvbXBsYWludHMg4pyFIik7CgogICAgZm9yKGludCBpPTA7aTxjb3VudDtpKyspewogICAgICAgIGlmKGNvbXBsYWludHNbaV0ucmVzb2x2ZWQpewogICAgICAgICAgICBpZighc2hvd25SZXNvbHZlZCl7IHB1dHMoIlxuLS0gUmVzb2x2ZWQgLS0iKTsgc2hvd25SZXNvbHZlZD0xOyB9CiAgICAgICAgICAgIHByaW50ZigiIyVkIHwgJXMgfCAlc1xuIiwKICAgICAgICAgICAgICAgICAgIGNvbXBsYWludHNbaV0uaWQsY29tcGxhaW50c1tpXS5kZXBhcnRtZW50LGNvbXBsYWludHNbaV0ubWVzc2FnZSk7CiAgICAgICAgfQogICAgfQp9CgovKiAtLS0tLS0tLS0tIE1haW4gbWVudSAtLS0tLS0tLS0tICovCmludCBtYWluKHZvaWQpCnsKICAgIGludCBjaG9pY2U7CiAgICB3aGlsZSgxKXsKICAgICAgICBwdXRzKCJcbj09PT09IENvbXBsYWludCBSb3V0aW5nIFN5c3RlbSA9PT09PSIpOwogICAgICAgIHB1dHMoIjEuIFN1Ym1pdCBDb21wbGFpbnQiKTsKICAgICAgICBwdXRzKCIyLiBWaWV3IEFsbCBDb21wbGFpbnRzIik7CiAgICAgICAgcHV0cygiMy4gU29sdmUgQ29tcGxhaW50Iik7CiAgICAgICAgcHV0cygiNC4gTm90aWNlIEJvYXJkIik7CiAgICAgICAgcHV0cygiNS4gRXhpdCIpOwogICAgICAgIHByaW50ZigiRW50ZXIgY2hvaWNlOiAiKTsKICAgICAgICBpZihzY2FuZigiJWQiLCZjaG9pY2UpIT0xKSBicmVhazsKCiAgICAgICAgc3dpdGNoKGNob2ljZSl7CiAgICAgICAgICAgIGNhc2UgMTogYWRkQ29tcGxhaW50KCk7ICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjogdmlld0FsbCgpOyAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMzogc29sdmVDb21wbGFpbnQoKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDogbm90aWNlQm9hcmQoKTsgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNTogcHV0cygiR29vZGJ5ZSEiKTsgcmV0dXJuIDA7CiAgICAgICAgICAgIGRlZmF1bHQ6IHB1dHMoIkludmFsaWQgY2hvaWNlISIpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==